我有一個程式,它有很多函式,每個函式都在一個單獨的執行緒上運行。當用戶按下Ctrl C時,只有 1 個執行緒出現例外崩潰,但正因為如此,整個程式可能無法正常作業。
當然,我可以在每個函式中撰寫這個結構:
try:
do_something()
except KeyboardInterrupt as e:
pass
但是,正如我所說,有很多功能,也許可以選擇不在每個功能中規定這種結構?
或者是否可以Ctrl C在 cmd 設定中禁用中斷?例如,在注冊表中。該程式創建自己的注冊表項HKEY_CURRENT_USER\Console\MyProgrammKey
更新 1
signal.signal(signal.SIGINT, signal.SIG_IGN)
它在幾乎所有情況下都有幫助,除了一種情況:一個具有無限回圈的執行緒input()無論如何都會中斷。
更新 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()
更新 3
例外截圖。

uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/427463.html
標籤:Python python-3.x 命令
上一篇:戲說領域驅動設計(五)——子域
下一篇:如何替換許多相同的條件?
