簡體   English   中英

如何在停止python腳本之前運行命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM