mirror of https://github.com/python/cpython
Initial revision
This commit is contained in:
parent
177dd80799
commit
b53e67837b
|
@ -0,0 +1,65 @@
|
|||
# A generic class to build line-oriented command interpreters
|
||||
|
||||
import string
|
||||
import sys
|
||||
import linecache
|
||||
|
||||
PROMPT = '(Cmd) '
|
||||
IDENTCHARS = string.letters + string.digits + '_'
|
||||
|
||||
class Cmd:
|
||||
|
||||
def init(self):
|
||||
self.prompt = PROMPT
|
||||
self.identchars = IDENTCHARS
|
||||
self.lastcmd = ''
|
||||
return self
|
||||
|
||||
def cmdloop(self):
|
||||
stop = None
|
||||
while not stop:
|
||||
try:
|
||||
line = raw_input(self.prompt)
|
||||
except EOFError:
|
||||
line = 'EOF'
|
||||
stop = self.onecmd(line)
|
||||
|
||||
def onecmd(self, line):
|
||||
line = string.strip(line)
|
||||
if not line:
|
||||
line = self.lastcmd
|
||||
print line
|
||||
else:
|
||||
self.lastcmd = line
|
||||
i, n = 0, len(line)
|
||||
while i < n and line[i] in self.identchars: i = i+1
|
||||
cmd, arg = line[:i], string.strip(line[i:])
|
||||
if cmd == '':
|
||||
return self.default(line)
|
||||
else:
|
||||
try:
|
||||
func = eval('self.do_' + cmd)
|
||||
except AttributeError:
|
||||
return self.default(line)
|
||||
return func(arg)
|
||||
|
||||
def default(self, line):
|
||||
print '*** Unknown syntax:', line
|
||||
|
||||
def do_help(self, arg):
|
||||
if arg:
|
||||
# XXX check arg syntax
|
||||
try:
|
||||
func = eval('self.help_' + arg)
|
||||
except:
|
||||
print '*** No help on', `arg`
|
||||
return
|
||||
func()
|
||||
else:
|
||||
import getattr
|
||||
names = getattr.dir(self)
|
||||
cmds = []
|
||||
for name in names:
|
||||
if name[:3] == 'do_':
|
||||
cmds.append(name[3:])
|
||||
print cmds
|
Loading…
Reference in New Issue