cmd模块:捕获Ctrl + C [重复]

Posted

技术标签:

【中文标题】cmd模块:捕获Ctrl + C [重复]【英文标题】:cmd module: capture Ctrl+C [duplicate] 【发布时间】:2015-09-13 09:54:35 【问题描述】:

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

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

但是,有没有办法捕获 CTRL+C 呢?我想在终止 Python 脚本之前执行一个特定的函数(保存所有未保存的更改),这是这样做的主要动机。

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

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 的系统上运行。

【问题讨论】:

您是否考虑过改用atexit? docs.python.org/3/library/atexit.html 【参考方案1】:

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

【讨论】:

以上是关于cmd模块:捕获Ctrl + C [重复]的主要内容,如果未能解决你的问题,请参考以下文章

捕获多个异常-C# [重复]

如何在 C/C++ 中从 system() 捕获结果 [重复]

ActionScript 3 捕获CTRL + N或CMD + N.

检测 NODE.JS 脚本是通过 bash(unix)/cmd(windows)直接调用还是导入(ESM 模块加载器)[重复]

[No000090]C#捕获控制台(console)关闭事件及响应cmd快捷键

在c ++中捕获shell脚本退出状态[重复]