我正在使用Python中的cmd
模块来构建一个小的交互式命令行程序。但是,从这个文档:http://docs.python.org/2/library/cmd.html,不清楚以编程方式退出程序(即cmdloop)的干净方法是什么。
理想情况下,我想在提示符上发出一些命令exit
,这将退出程序。
答案 0 :(得分:12)
您需要覆盖postcmd
方法:
Cmd.postcmd(停止,行)
在命令调度完成后执行Hook方法。这个 方法是Cmd中的存根;它存在被子类覆盖。 line是执行的命令行,stop是一个标志 表示在调用后是否终止执行 POSTCMD();这将是onecmd()方法的返回值。该 此方法的返回值将用作新值 内部标志对应停止;返回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
答案 1 :(得分: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')