blob: 87ddcfa7e72aa2ea9e04d3962156a83124890675 [file] [log] [blame]
Guido van Rossumb53e6781992-01-24 01:12:17 +00001# A generic class to build line-oriented command interpreters
2
3import string
4import sys
5import linecache
6
7PROMPT = '(Cmd) '
8IDENTCHARS = string.letters + string.digits + '_'
9
10class Cmd:
Guido van Rossum9b3bc711993-06-20 21:02:22 +000011
12 def __init__(self):
Guido van Rossumb53e6781992-01-24 01:12:17 +000013 self.prompt = PROMPT
14 self.identchars = IDENTCHARS
15 self.lastcmd = ''
Guido van Rossumb53e6781992-01-24 01:12:17 +000016
17 def cmdloop(self):
18 stop = None
19 while not stop:
20 try:
21 line = raw_input(self.prompt)
22 except EOFError:
23 line = 'EOF'
24 stop = self.onecmd(line)
25
26 def onecmd(self, line):
27 line = string.strip(line)
28 if not line:
29 line = self.lastcmd
Guido van Rossumb53e6781992-01-24 01:12:17 +000030 else:
31 self.lastcmd = line
32 i, n = 0, len(line)
33 while i < n and line[i] in self.identchars: i = i+1
34 cmd, arg = line[:i], string.strip(line[i:])
35 if cmd == '':
36 return self.default(line)
37 else:
38 try:
Guido van Rossumc629d341992-11-05 10:43:02 +000039 func = getattr(self, 'do_' + cmd)
Guido van Rossumb53e6781992-01-24 01:12:17 +000040 except AttributeError:
41 return self.default(line)
42 return func(arg)
43
44 def default(self, line):
45 print '*** Unknown syntax:', line
46
47 def do_help(self, arg):
48 if arg:
49 # XXX check arg syntax
50 try:
Guido van Rossumc629d341992-11-05 10:43:02 +000051 func = getattr(self, 'help_' + arg)
Guido van Rossumb53e6781992-01-24 01:12:17 +000052 except:
53 print '*** No help on', `arg`
54 return
55 func()
56 else:
Guido van Rossum732282f1992-08-19 16:49:37 +000057 import newdir
Guido van Rossum9b3bc711993-06-20 21:02:22 +000058 names = newdir.dir(self.__class__)
Guido van Rossumb53e6781992-01-24 01:12:17 +000059 cmds = []
60 for name in names:
61 if name[:3] == 'do_':
62 cmds.append(name[3:])
63 print cmds