【发布时间】: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
标签: python cmd terminal signals