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++ 中从 system() 捕获结果 [重复]
ActionScript 3 捕获CTRL + N或CMD + N.
检测 NODE.JS 脚本是通过 bash(unix)/cmd(windows)直接调用还是导入(ESM 模块加载器)[重复]