python cmd模块在捕获异常后返回提示符

时间:2018-06-17 19:13:13

标签: python cmd

我有这个代码,我使用的是python 3:

import cmd
class myShell(cmd.Cmd):
    def do_bad(self, arg):
        raise Exception('something bad happened')


if __name__ == '__main__':
    sh = myShell()
    sh.cmdloop()

我想在抛出异常后返回shell提示符。怎么做?

2 个答案:

答案 0 :(得分:2)

从代码中,函数从Cmd.onecmd调用(即使在循环中)。

您可以简单地覆盖它:

def onecmd(self, line):
    try:
        return super().onecmd(line)
    except:
        # display error message
        return False # don't stop

优点是您不会停止命令循环。

答案 1 :(得分:1)

你可以覆盖cmdloop以包裹原始的cmdLoop电话:

class myShell(cmd.Cmd):
    def do_bad(self, arg):
        raise Exception('something bad happened')
    def cmdLoop(self):
       try:
           cmd.Cmd.cmdLoop(self)
       except Exception as e:
           print("recovered from exception {}".format(e))

换行会让SystemExitKeyboardInterrupt通过。