python2.7ctrl+;不确定行为
我希望在我的脚本中使用正确的CTRL+C处理,我已经阅读了一些示例,但我无法实现确定性行为。 例如,给定以下脚本: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
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....