【问题标题】:cmd module: capture Ctrl+C [duplicate]cmd模块:捕获Ctrl + C [重复]
【发布时间】: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 的系统上运行。

【问题讨论】:

标签: python cmd terminal signals


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多