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

问题描述 投票:0回答:2

我有一个程序,它有很多函数,每个函数都在单独的线程上运行。 当用户按下

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

异常截图。 enter image description here

python python-3.x cmd
2个回答
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

0
投票

此代码运行良好。我已经为地磅制作了程序,其中我必须使用 control c 进行校准,因此如果我按 control c 那么程序将自动退出以避免这些我使用了上面提到的代码 非常感谢你

© www.soinside.com 2019 - 2024. All rights reserved.