blob: 7c512def60a74489cf3e44317aef8c5815de63e5 [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 Rossum9b3bc711993-06-20 21:02:22 +000016
17 def init(self):
Guido van Rossumb53e6781992-01-24 01:12:17 +000018 return self
19
20 def cmdloop(self):
21 stop = None
22 while not stop:
23 try:
24 line = raw_input(self.prompt)
25 except EOFError:
26 line = 'EOF'
27 stop = self.onecmd(line)
28
29 def onecmd(self, line):
30 line = string.strip(line)
31 if not line:
32 line = self.lastcmd
Guido van Rossumb53e6781992-01-24 01:12:17 +000033 else:
34 self.lastcmd = line
35 i, n = 0, len(line)
36 while i < n and line[i] in self.identchars: i = i+1
37 cmd, arg = line[:i], string.strip(line[i:])
38 if cmd == '':
39 return self.default(line)
40 else:
41 try:
Guido van Rossumc629d341992-11-05 10:43:02 +000042 func = getattr(self, 'do_' + cmd)
Guido van Rossumb53e6781992-01-24 01:12:17 +000043 except AttributeError:
44 return self.default(line)
45 return func(arg)
46
47 def default(self, line):
48 print '*** Unknown syntax:', line
49
50 def do_help(self, arg):
51 if arg:
52 # XXX check arg syntax
53 try:
Guido van Rossumc629d341992-11-05 10:43:02 +000054 func = getattr(self, 'help_' + arg)
Guido van Rossumb53e6781992-01-24 01:12:17 +000055 except:
56 print '*** No help on', `arg`
57 return
58 func()
59 else:
Guido van Rossum732282f1992-08-19 16:49:37 +000060 import newdir
Guido van Rossum9b3bc711993-06-20 21:02:22 +000061 names = newdir.dir(self.__class__)
Guido van Rossumb53e6781992-01-24 01:12:17 +000062 cmds = []
63 for name in names:
64 if name[:3] == 'do_':
65 cmds.append(name[3:])
66 print cmds