用原始输入捕获键盘中断



我有一点python代码,可以尝试让raw_input捕获键盘中断。如果我在这个函数中运行代码,它运行得非常好。但是,如果我在程序中运行它,打印语句将永远不会生成,这表明键盘中断没有被捕获。该程序试图退出,但失败了,直到升级到SIGKILL,这当然很好。我的猜测是在其他地方,键盘中断被捕获,根本无法运行异常。我的问题是,这样的中断可能发生在哪里,我如何防止它阻塞这个中断。我的计划是在程序捕捉键盘中断和自行终止之间增加一点延迟,给exception一个捕捉的时刻。

任何想法都赞赏

谢谢!

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()

我已经将其缩小到以下内容:

import sys
text=''
try:
    print raw_input(text)
except KeyboardInterrupt:
    print "Interrupted by user"
    sys.exit()

当我使用python 2.7在命令行上运行它时,它非常有效。它允许我在控制台上输入,当我点击ctrl+c时,它会打印出由用户中断的内容

编辑:一开始我误解了你的问题,但是当我使用你的例子中的方法并从另一个方法调用它时,结果是相同的

我已经确定问题的原因是另一个中断处理程序在KeyboardInterrupt被击中之前杀死了脚本。我通过为信号设置自己的中断处理程序来解决这个问题。信号情报:

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()在被告知时将直接死亡。

相关内容

  • 没有找到相关文章

最新更新