这是一个两部分的问题,请参见下文:
- 我需要创建某种控制台供测试人员手动运行一些命令!模块是
cmd
一个好方法吗?
下面是我到目前为止使用cmd
模块的代码,我只是想学习,到目前为止我有两个问题:
为什么自动完成功能不起作用?如果我加倍
<TAB>
,我什么也得不到,光标只会向前移动。不是默认提供的自动完成功能吗?我是否必须为每种方法处理错误数量的参数?如果使用错误数量的参数调用方法,或者何时应该使用参数调用它们而没有调用,我希望方法-“帮助”文本自动显示。
.
class InteractiveConsole(cmd.Cmd):
""" Interactive command line """
def __init__(self):
cmd.Cmd.__init__(self)
self.prompt = "=>> "
self.intro = "Welcome to IRT console!"
def do_hist(self, args):
"""Print a list of commands that have been entered"""
print self._hist
def do_exit(self, args):
"""Exits from the console"""
return -1
def do_help(self, args):
"""Get help on commands
'help' or '?' with no arguments prints a list of commands for which help is available
'help <command>' or '? <command>' gives help on <command>
"""
# # The only reason to define this method is for the help text in the doc string
cmd.Cmd.do_help(self, args)
# # Override methods in Cmd object ##
def preloop(self):
"""Initialization before prompting user for commands.
Despite the claims in the Cmd documentaion, Cmd.preloop() is not a stub.
"""
cmd.Cmd.preloop(self) # # sets up command completion
self._hist = [] # # No history yet
self._locals = {} # # Initialize execution namespace for user
self._globals = {}
def postloop(self):
"""Take care of any unfinished business.
Despite the claims in the Cmd documentaion, Cmd.postloop() is not a stub.
"""
cmd.Cmd.postloop(self) # # Clean up command completion
print "Exiting..."
def precmd(self, line):
""" This method is called after the line has been input but before
it has been interpreted. If you want to modify the input line
before execution (for example, variable substitution) do it here.
"""
if line != '':
self._hist += [ line.strip() ]
return line
def postcmd(self, stop, line):
"""If you want to stop the console, return something that evaluates to true.
If you want to do some post command processing, do it here.
"""
return stop
def default(self, line):
"""Called on an input line when the command prefix is not recognized.
In that case we execute the line as Python code.
"""
try:
exec(line) in self._locals, self._globals
except Exception, e:
print e.__class__, ":", e
def emptyline(self):
"""Do nothing on empty input line"""
pass
def do_install(self, pathToBuild):
"""install [pathToBuild]
install using the specified file"""
if pathToBuild:
print "installing %s" % pathToBuild
else:
print "<ERROR> You must specify the absolute path to a file which should be used!"
def do_configure(self, pathToConfiguration):
"""configure [pathToConfiguration]
configure using the specified file"""
if pathToConfiguration:
print "configuring %s" % pathToConfiguration
else:
print "<ERROR> You must specify the absolute path to a file which should be used!"