1

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/ ブロック内にあります。それが問題である場合、このシグナル処理モジュール内からどのように終了できますか? それが問題ではない場合、それは何ですか?

4

1 に答える 1