如何在 cmd/python 中使用 Ctrl+C 禁用中断

How to disable interruption with Ctrl+C in cmd/python

我有一个程序有很多功能,每个 运行 在一个单独的线程上。 当用户按下Ctrl+C时,只有1个线程异常崩溃,但正因为如此,整个程序可能无法正常运行。

当然,我可以在每个函数中写这个构造:

try:
    do_something()
except KeyboardInterrupt as e:
    pass

但是,正如我所说,有很多功能,也许可以选择不在每个功能中规定这种结构?

或者是否可以在 cmd 设置中禁用 Ctrl+C 中断? 例如,在 注册表 中。该程序在 HKEY_CURRENT_USER\Console\MyProgrammKey

中创建自己的注册表项

UPD 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,如下所示:

test.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