cmd模块:捕获Ctrl + C.

时间:2015-06-26 12:32:15

标签: python cmd terminal signals

我使用Python的默认cmd module来创建基于命令行的应用程序。

根据docs CTRL + D (它向命令行发出EOF信号)可以通过实现一个名为do_EOF的函数来捕获,效果很好。

但是,有没有办法捕获 CTRL + C ?我希望在终止Python脚本之前执行特定的功能(保存所有未保存的更改),这是执行此操作的主要动机。

目前,我使用KeyboardInterrupts抓取try-except-block,如下所示:

if __name__ == '__main__':
    try:
        MyCmd().cmdloop()
    except KeyboardInterrupt:
        print('\n')

我试图将其扩展为:

if __name__ == '__main__':
    try:
        app = MyCmd().cmdloop()
    except KeyboardInterrupt:
        app.execute_before_quit()
        print('\n')

这会导致以下NameError

name 'app' is not defined

如何捕获 CTRL + C

我认为signal可能会以某种方式解决问题,但我不确定......

备注:该脚本需要在基于Unix和Windows的系统上运行。

1 个答案:

答案 0 :(得分:0)

Ctrl C激活系统退出,这是一个例外,我很确定你可以通过try和except来捕获它。注意:要捕获SystemExit,必须在except中明确指定它。