我写了一个小脚本,在 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/ 块内。如果这是问题所在,我该如何退出这个信号处理模块?如果不是问题,那是什么?