我有一个程序,它有很多函数,每个函数都在单独的线程上运行。 当用户按下
Ctrl+C
时,只有1个线程异常崩溃,但正因为如此,整个程序可能无法正常工作。
当然,我可以在每个函数中都写这个构造:
try:
do_something()
except KeyboardInterrupt as e:
pass
但是,正如我所说,有很多函数,也许可以选择不在每个函数中规定这种构造?
或者是否可以在cmd设置中禁用
Ctrl+C
中断?
例如,在注册表中。该程序在 HKEY_CURRENT_USER\Console\MyProgrammKey
中创建自己的注册表项
更新1
signal.signal(signal.SIGINT, signal.SIG_IGN)
它在几乎所有情况下都有帮助,除了一种情况:具有
input()
函数的无限循环的线程无论如何都会中断。
UPD 2
这是示例代码
import signal, time
from threading import Thread
def one():
while True:
inp = input("INPUT: ")
def two():
while True:
print("I just printing...")
time.sleep(1)
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal.SIG_IGN)
Thread(target=one).start()
Thread(target=two).start()
UPD 3
Ctrl+C
将向程序发送 SIGINT
信号,因此您可以定义一个全局信号处理程序来忽略该 SIGINT
,如下所示:
测试.py:
import signal, os, time
def handler(signum, frame):
pass
signal.signal(signal.SIGINT, handler)
time.sleep(10)
print("done")
程序运行过程中,如果输入
Ctrl+c
,程序会忽略它,继续运行,最后打印done
:
$ python3 test.py
^Cdone
此代码运行良好。我已经为地磅制作了程序,其中我必须使用 control c 进行校准,因此如果我按 control c 那么程序将自动退出以避免这些我使用了上面提到的代码 非常感谢你