Python で非常に時間のかかることを行う小さなスクリプトを作成し、SIGINT、SIGQUIT、および SIGINFO をリッスンするシグナル処理モジュールを含め、ユーザーが SIGQUIT または SIGINFO を入力するとステータスを出力し、SIGINT( CTRL-C) を入力します。私は数分でそれをハッキングして、いくつかの外国のコードを盗んだので、コードは非常にずさんです - 心配しないでください、私が(または、私が行き詰まっているので、あなたが)バグを見つけたらすぐにそれを片付けてください:
def setup_signals(progress_bar):
import signal
import sys
def progress(*args):
print(progress_bar)
def killitwithfire(*args):
print("[x] User interrupted with CTRL-C. Aborting.")
sys.exit(0)
for sig in (signal.SIGINFO, signal.SIGQUIT):
signal.signal(sig, progress)
for sig in (signal.SIGINT,):
signal.signal(sig, killitwithfire)
print("Sig handlers built:\n Press Ctrl+T(BSD/OS X) or Ctrf+4(Linux) for progress.")
print("Press CTRL-C to abort.")
ここでの問題は、CTRL-C が入力されると、killitwithfire() のメッセージ (不適切な参照で申し訳ありません) が出力されますが、終了しないことです。
これが実行されるコードは、try/catch/ ブロック内にあります。それが問題である場合、このシグナル処理モジュール内からどのように終了できますか? それが問題ではない場合、それは何ですか?