Python 捕捉Ctrl C退出指令碼程式

2021-10-02 23:29:01 字數 1301 閱讀 5000

當我們的指令碼程式進入死迴圈或者卡在某個耗時操作,需要退出程式時,一般都是使用ctrl+c來殺死程序,那麼,如何在程式裡進行這個操作呢?實際上,在命令列輸入ctrl+c的原理是觸發了 sigint 訊號,所以我們需要捕捉這個訊號。

使用signal模組開捕捉訊號, 並使用sys的exit方法退出程式。

處理死迴圈

import signal

import sys

import time

defquit

(signum, frame)

: sys.exit(0)

if __name__ ==

"__main__"

:## sigint 終止程序 中斷程序

signal.signal(signal.sigint, quit)

## signal.signal(signal.sigterm, quit)

while

true

: time.sleep(

1)

處理io/耗時操作

不同於死迴圈,在單程序單執行緒的情況下,如果程式卡在某個io操作或者耗時操作,python無法捕捉到signal訊號(得處理完當前任務才可以)。

這就需要多執行緒來處理問題,當然因為gil的原因,這裡的多執行緒也只是單核多執行緒。

import time

import signal

import sys

import threading

defquit

(signum, frame)

:print

("bye!"

) sys.exit(0)

defwork()

: time.sleep(

99999

)def

main()

: work_thread = threading.thread(target=work)

work_thread.daemon =

true

work_thread.start(

) signal.signal(signal.sigint, quit)

print

("start working"

)while

true

: time.sleep(1)

if __name__ ==

"__main__"

: main(

)

ctrl c退出python多執行緒程式

多工並行處理多數需要用到多執行緒,第一次用python寫乙個任務,需要同時監控兩個狀態,就使用了下多執行緒,但測試時候ctrl c居然退不出,我以為是bug,結果看了下確實是這樣的。如果乙個python程式用了多執行緒,當子執行緒沒有結束時,用ctrl c是關閉不了主線程的,這時候就只能用kill命...

golang捕獲ctrl c退出程式

在golang當中如何捕獲ctrl c命令,讓程式有序的的退出?首先測試一段golang 捕獲sigint和sigkill c make chan os.signal,1 signal.notify c,os.interrupt,os.kill s c fmt.println got signal ...

python錯誤捕捉

python使用try except捕捉錯誤,當發現錯誤時無需從底層向上依次返回錯誤 而是直接丟擲異常。通常使用方法 try 執行語句,發生錯誤時後續語句不在執行,轉至except except 處理該型別的錯誤 except else 無錯誤發生時執行此處 finally 不管有無錯誤都會執行 錯...