我有一些python代码试图让raw_input捕获键盘中断。如果我在这个函数中运行代码它完全正常。但是如果我在我的程序中运行它,则永远不会发出print语句,表明没有捕获到键盘中断。该程序尝试退出并失败,直到它升级为SIGKILL,这当然可以正常工作。我的猜测是其他地方正在捕获键盘中断,防止异常运行。我的问题是,这样的中断可能会发生在哪里,我怎样才能阻止它阻止这个中断。我的计划是在程序捕获键盘中断和杀死自己之间稍加延迟,以便在这里给出一个时刻来捕捉。
赞赏任何想法
谢谢!
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()
答案 0 :(得分:2)
我已将其缩小到以下内容:
import sys
text=''
try:
print raw_input(text)
except KeyboardInterrupt:
print "Interrupted by user"
sys.exit()
当我使用python 2.7在命令行上运行它时,它的工作正常。 它允许我在控制台上输入一个输入,当我按下ctrl + c时,它会被用户输入
修改强> 我最初误读了你的问题,但是当我使用你的例子中的方法并从另一个方法调用它时,结果是相同的
答案 1 :(得分:1)
我已经确定了我的问题的原因是在敲击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()会在被告知时死亡。