最近在學(xué)習(xí)Python編程時,遇到了一些監(jiān)控窗口關(guān)閉的問題。在Linux中,終端窗口被關(guān)閉后,運行在該終端中的程序就會停止。如何監(jiān)控這個事件并在程序停止前完成一些工作?Python中有一個名為 signal 的庫,可以用來監(jiān)控信號事件,包括終端窗口的關(guān)閉事件。以下是用Python監(jiān)控窗口關(guān)閉的示例代碼,代碼注釋中詳細(xì)說明了代碼的功能。
import signal def handle_exit(signal, frame): print("Window closing") # 捕獲SIGINT信號(Ctrl+C)。SIGINT信號是Ctrl+C的中斷信號,可以用來測試程序。 signal.signal(signal.SIGINT, handle_exit) # 捕獲SIGTERM信號。SIGTERM信號是Linux系統(tǒng)中的結(jié)束進(jìn)程信號,當(dāng)kill命令發(fā)送給進(jìn)程時就會收到該信號。 signal.signal(signal.SIGTERM, handle_exit) # 捕獲SIGHUP信號。SIGHUP信號是Linux系統(tǒng)中的掛起進(jìn)程信號,可以通過該信號在進(jìn)程不退出的情況下重新加載配置文件。 signal.signal(signal.SIGHUP, handle_exit) while True: print("Program is running") # 這里可以放置需要運行的代碼 # 如果程序需要在窗口關(guān)閉前完成一些工作,可將代碼放在while循環(huán)中。
在上述代碼中,handle_exit() 函數(shù)是一個信號處理函數(shù)。當(dāng)收到SIGINT、SIGTERM或SIGHUP信號時,就會調(diào)用該函數(shù)。在 Python 中,可以使用 signal.signal(signalnum, handler) 函數(shù)來設(shè)置信號處理函數(shù)。signalnum 是要捕獲的信號的編號,handler 是處理該信號的函數(shù)名。
在程序主循環(huán)中,我們可以運行一些需要在程序終止前完成的代碼。如果收到窗口關(guān)閉事件,handle_exit() 函數(shù)就會被調(diào)用,并輸出 "Window closing"。