在 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
我已经阅读了 try
和 except 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的主要内容,如果未能解决你的问题,请参考以下文章