Capture Control-C in Python
我想知道是否可以通过以下方式在python中捕获Control-C:
1 2 3 4
| if input != contr-c:
#DO THINGS
else:
#quit |
我已经阅读了try和except KeyboardInterrupt的内容,但它们并不适合我。
-
像这样:stackoverflow.com/questions/1112343/…?
-
是的,但是我尝试使用KeyboardInterrupt但是不是只退出,而是在try中执行操作,这不是我想要的。
-
你在什么平台上?什么版本的Python?你是否通过input / stdin.read /等读取输入,特定于平台的getch(如果是,哪个?),curses或......?在每种情况下通常都可以,但案例之间的答案非常不同。
-
@pauliwago:你是什么意思"Python在try中进行操作"?通常,当您处理异常时,Python会在except块中执行操作。如果您希望它退出,您可以,例如,在该except块中调用sys.exit()。
-
更一般地说:只是说"不为我工作"并不是很有用。准确地告诉我们你尝试过什么,你期望什么,以及发生了什么。
-
作为旁注:您不应该调用变量input,因为它会影响同名的内置函数。
-
我不认为这是一个重复。如果我理解了OP的问题,那就不是抓住Ctrl-C这是一个问题,而是在他抓住它时退出(没有回溯)。从KeyboardException切换到SIGINT处理程序不是答案。它解决了他可能遇到的一些其他问题 - 并且还产生了一些新问题。但主要是,它使他现有的问题完全一样。
考虑阅读关于处理异常的这个页面。它应该有所帮助。
正如@abarnert所说,在except KeyboardInterrupt:之后执行sys.exit()。
就像是
1 2 3 4 5
| try:
# DO THINGS
except KeyboardInterrupt:
# quit
sys.exit() |
您也可以使用内置的exit()函数,但正如@eryksun指出的那样,sys.exit更可靠。
-
如果Python以-S启动,则不会定义site.exit(builtins exit)。 这并不常见,但仍然是sys.exit更可靠。 您也可以使用raise SystemExit([exit_code=0])。
根据你的评论,听起来你唯一的问题是except KeyboardInterrupt:是你不知道如何在你得到那个中断时让它退出。
如果是这样,那很简单:
1 2 3 4 5 6
| import sys
try:
user_input = input()
except KeyboardInterrupt:
sys.exit(0) |