如何干净地退出cmd模块的cmd循环

时间:2013-03-21 00:37:48

标签: python cmd

我正在使用Python中的cmd模块来构建一个小的交互式命令行程序。但是,从这个文档:http://docs.python.org/2/library/cmd.html,不清楚以编程方式退出程序(即cmdloop)的干净方法是什么。

理想情况下,我想在提示符上发出一些命令exit,这将退出程序。

2 个答案:

答案 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')