在 Python 中捕获 Control-C

Posted

技术标签:

【中文标题】在 Python 中捕获 Control-C【英文标题】:Capture Control-C in Python 【发布时间】:2013-02-25 10:14:29 【问题描述】:

我想知道是否可以通过以下方式在 python 中捕获 Control-C:

 if input != contr-c:
    #DO THINGS
 else:
    #quit

我已经阅读了 tryexcept KeyboardInterrupt 的内容,但它们对我不起作用。

【问题讨论】:

类似这样的东西:***.com/questions/1112343/…? 是的,但我尝试过使用KeyboardInterrupt,但不是仅仅退出,Python 会在try 中执行操作,这不是我想要的。 你在哪个平台上?什么版本的 Python?您是通过input/stdin.read/etc.、特定于平台的getch(如果是,是哪个?)、curses 或...读取输入?通常在每种情况下都有可能,但不同情况下的答案却大不相同。 @pauliwago:“Python 执行try 中的操作”是什么意思?通常,当您处理异常时,Python 会执行 except 块中的操作。如果你想让它退出,你可以,例如,在那个 except 块中调用 sys.exit() 更一般地说:只是说“不为我工作”并不是很有用。准确告诉我们您尝试了什么、预期什么以及发生了什么。 【参考方案1】:

考虑阅读有关处理异常的this 页面。它应该会有所帮助。

正如@abarnert 所说,在except KeyboardInterrupt: 之后执行sys.exit()

有点像

try:
    # DO THINGS
except KeyboardInterrupt:
    # quit
    sys.exit()

您也可以使用内置的exit() 函数,但正如@eryksun 指出的那样,sys.exit 更可靠。

【讨论】:

如果 Python 以 -S 启动,则不会定义 site.exit(内置退出)。这并不常见,但sys.exit 仍然更可靠。您也可以使用raise SystemExit([exit_code=0])【参考方案2】:

从您的 cmets 看来,except KeyboardInterrupt: 的唯一问题是您不知道如何在收到中断时让它退出。

如果是这样,那很简单:

import sys

try:
    user_input = input()
except KeyboardInterrupt:
    sys.exit(0)

【讨论】:

以上是关于在 Python 中捕获 Control-C的主要内容,如果未能解决你的问题,请参考以下文章

在python中捕获人脸框

在 Python 中捕获 Control-C

Python:在 QListWidget 中捕获重新排序事件?

如何在 python 中捕获异常(在 C++ 中引起)

如何在unittest中捕获python子进程stdout

从 Python 中捕获音频