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

これら2つの異なる出力を取得できます

$ 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

二重の例外処理とシグナル処理なしで、さまざまな構成を試しましたが、常に別の動作を得ることができますCTRL+C

4

2 に答える 2

1

CTRL_C_EVENTシグナルに応答することをお勧めします:

CTRL+Cキーストローク イベントに対応するシグナル。このシグナルは、os.kill() でのみ使用できます。

于 2013-10-22T13:34:14.463 に答える