Python cmd模块:捕获Ctrl+;C

Python cmd模块:捕获Ctrl+;C,python,cmd,terminal,signals,Python,Cmd,Terminal,Signals,我正在使用Python的默认设置创建一个基于命令行的应用程序 根据CTRL+D(向命令行发送EOF信号)可以通过实现一个名为do_EOF的函数来捕获,该函数工作得很好 但是,有没有一种方法也可以捕获CTRL+C?我想在终止Python脚本之前执行一个特定的函数(保存所有未保存的更改),这是执行此操作的主要动机 目前,我使用try except block捕捉键盘中断,如下所示: if __name__ == '__main__': try: MyCmd().cmdloop

我正在使用Python的默认设置创建一个基于命令行的应用程序

根据CTRL+D(向命令行发送EOF信号)可以通过实现一个名为
do_EOF
的函数来捕获,该函数工作得很好

但是,有没有一种方法也可以捕获CTRL+C?我想在终止Python脚本之前执行一个特定的函数(保存所有未保存的更改),这是执行此操作的主要动机

目前,我使用
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')
这会导致以下
名称错误

name 'app' is not defined
如何捕获CTRL+C

我想我能做到这一点,但我不确定



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

Ctrl C会激活系统退出,这就像是一个异常,我很确定您可以使用try和except捕获它。注意:要捕获SystemExit,您必须在except中显式指定它。

Ctrl C激活系统退出,这就像一个异常,我很确定您可以使用try和except捕获它。注意:要捕获SystemExit,您必须在except中明确指定它。

您是否考虑过改用
atexit
?您是否考虑过改用
atexit