[英]How to run a command before stopping a python script
我有一個Python代碼,可在端口5002
上啟動UDP通信。 所以發生的事情是,當我第一次運行代碼時,它可以正常工作,然后我使用ctlr z/ctrl c
關閉python腳本,然后再次運行顯示錯誤以下信息的代碼:
sock.bind(address)
OSError: [Errno 98] Address already in use
這可能是因為python腳本正在運行並保持端口繁忙。 因此它向我顯示了以上錯誤。 為了解決這個問題,我想到了在代碼殺死sock.close()
關閉套接字和sys.exit()
以正確退出python腳本之前運行這兩個命令。 這就是為什么我需要知道如何在代碼被殺死之前立即運行這些命令。 我不能使用KeyboardInterrupt
異常,因為將來它將作為服務運行。
我找到了這個答案,但無法實現。 例如,如果我這樣做:
import atexit
import time
def exit_handler():
print("STOPPED")
while True:
print("Running....")
time.sleep(1)
atexit.register(exit_handler)
這樣可以繼續運行,但是當我殺死代碼時,它不會顯示Stopped
。 如何實施它,或者有其他方法可以處理我的情況。
謝謝
atexit
模塊的文檔有一個重要說明:
注意:當程序被非Python處理的信號殺死時,不會調用通過此模塊注冊的功能
這意味着,如果您在不進行特殊處理的情況下終止腳本,則不會調用已注冊的函數。
因此,您應該注冊SIGTERM和SIGINT的處理程序:
signal.signal(SIGTERM, (lambda signum, frame: exit_handler()))
signal.signal(SIGINT, (lambda signum, frame: exit_handler()))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.