Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python2.7ctrl+;不确定行为_Python_Python 2.7_Signals - Fatal编程技术网

python2.7ctrl+;不确定行为

python2.7ctrl+;不确定行为,python,python-2.7,signals,Python,Python 2.7,Signals,我希望在我的脚本中使用正确的CTRL+C处理,我已经阅读了一些示例,但我无法实现确定性行为。 例如,给定以下脚本: 1 import signal 2 import time 3 4 def sigint_handler(signum, frame): 5 raise Exception('captured ctrl+c') 6 7 signal.signal(signal.SIGINT, sigint_handler) 8 9 c = True 1

我希望在我的脚本中使用正确的CTRL+C处理,我已经阅读了一些示例,但我无法实现确定性行为。 例如,给定以下脚本:

  1 import signal
  2 import time
  3
  4 def sigint_handler(signum, frame):
  5     raise Exception('captured ctrl+c')
  6
  7 signal.signal(signal.SIGINT, sigint_handler)
  8
  9 c = True
 10 while c:
 11     try:
 12         pass
 13     except KeyboardInterrupt as e:
 14         print 'captured keyboardexception'
 15         print str(e)
 16     except Exception as e:
 17         print 'captured exception'
 18         print str(e)
 19         c = False
我可以得到这两种不同的输出

$ python ctrlc.py
^Ccaptured exception
captured ctrl+c

$ python ctrlc.py
^CTraceback (most recent call last):
  File "ctrlc.py", line 12, in <module>
    pass
  File "ctrlc.py", line 5, in sigint_handler
    raise Exception('captured ctrl+c')
Exception: captured ctrl+c
$python ctrlc.py
^特许例外
捕获ctrl+c
$python ctrlc.py
^CTraceback(最近一次通话最后一次):
文件“ctrlc.py”,第12行,在
通过
文件“ctrlc.py”,第5行,在sigint_处理程序中
引发异常('捕获的ctrl+c')
异常:捕获ctrl+c

我尝试了不同的配置,也有双重异常处理,没有信号处理,但按CTRL+C总是可以得到不同的beahaviours,我建议响应:

与CTRL+C击键事件对应的信号。此信号只能与os.kill()一起使用


经典的比赛条件。展开循环后,看起来如下所示:

while True:
    ....
    try:
       pass      <-----
    ....

while True:      <-----
    ....
    try:
        pass

你在什么平台上运行?我不明白,你的意思是什么?@hithwen:CTRL+C不是你希望响应的事件吗?理论上我不需要处理任何信号,只是为了捕获键盘中断(或基本异常),我在示例中添加了信号处理,以根据执行路径生成不同的消息。我应该在示例中处理CTRL\u C\u事件谢谢,我认为这就是我真实脚本中发生的事情。在进入try之前按了ctrl+c
try:
    while True:
         pass
except....