如何干净地退出cmd模块的命令循环
我正在用Python的cmd
模块来制作一个简单的命令行互动程序。不过,从这个文档来看:http://docs.python.org/2/library/cmd.html,我不太清楚怎么才能干净利落地退出这个程序(也就是cmd循环)。
理想情况下,我希望在提示符下输入一个命令exit
,这样就能退出程序。
2 个回答
0
另外一种解决方法就是简单地抛出一个自定义的异常,然后捕获它。
import cmd
class ExitCmdException(Exception):
pass #Could do something but just make a simple exception
class myCmd(cmd.Cmd):
#...
def do_quit(self, args):
""" Quits the command loop """
raise ExitCmdException()
#...
try:
foo.cmdloop()
except ExitCmdException as e:
print('Good Bye')
14
你需要重写一下 postcmd
这个方法:
Cmd.postcmd(stop, line)
这个方法是在一个命令执行完之后被调用的。它在 Cmd 类里是个空壳,主要是为了让子类去实现。这里的 line 是刚刚执行的命令行,而 stop 是一个标志,表示在调用 postcmd() 之后是否要停止执行;这个标志的值是由 onecmd() 方法返回的。这个方法的返回值会作为一个内部标志的新值,和 stop 对应;如果返回 false,就会继续执行后面的内容。
还有来自 cmdloop
的文档说明:
这个方法会在 postcmd() 方法返回 true 值时结束。传给 postcmd() 的 stop 参数是对应命令的 do_*() 方法的返回值。
换句话说:
import cmd
class Test(cmd.Cmd):
# your stuff (do_XXX methods should return nothing or False)
def do_exit(self,*args):
return True