我有一些python代码可以尝试让raw_input捕捉键盘中断。如果我运行这个函数中的代码,它可以很好地工作。但是,如果我在我的程序中运行它,就永远不会执行print语句,这表明键盘中断没有被捕获。程序试图退出,但失败了,直到它升级到SIGKILL,SIGKILL当然工作正常。我的猜测是在其他地方捕捉到了键盘中断,从而阻止了异常的运行。我的问题是,这样的中断可能发生在哪里,以及我如何防止它阻止这个中断。我的计划是在程序捕获键盘中断和终止自身之间增加一个小小的延迟,以便让excepting捕获一个时刻。
有什么好点子吗?
谢谢!
import sys
def interruptable_input(text=''):
'''Takes raw input, but accepts keyboard interrupt'''
try:
return raw_input(text)
except KeyboardInterrupt:
print "Interrupted by user"
sys.exit()发布于 2016-03-24 23:40:15
我已经将其范围缩小到以下几点:
import sys
text=''
try:
print raw_input(text)
except KeyboardInterrupt:
print "Interrupted by user"
sys.exit()当我使用python2.7在命令行上运行它时,它工作得很好。它允许我在控制台上键入输入,当我点击ctrl+c时,它会打印用户输入的内容
编辑:一开始我误解了您的问题,但是当我使用您示例中的方法并从另一个方法中调用它时,结果是相同的
发布于 2016-03-25 05:52:34
我已经确定问题的原因是另一个中断处理程序在KeyboardInterrupt被命中之前终止了脚本。我通过为signal.SIGINT设置自己的中断处理程序解决了这个问题,如下所示:
import sys
import signal
signal.signal(signal.SIGINT, signal_term_handler)
def signal_term_handler(signal, frame):
'''Handles KeyboardInterrupts to ensure smooth exit'''
rospy.logerr('User Keyboard interrupt')
sys.exit(0)它稍微不那么直接,但它完成了工作。现在,raw_input()将在被告知时简单地终止。
https://stackoverflow.com/questions/36203740
复制相似问题