私は、ポート5002
でUDP通信を開始するPythonコードを持っています。これは、Pythonスクリプトが実行されている可能性があるためPythonスクリプトを停止する前にコマンドを実行する方法
sock.bind(address)
OSError: [Errno 98] Address already in use
:私は最初のコードを実行したときにだから何が起こるか、それはその後、正常に動作し、私はctlr z/ctrl c
を使用してPythonスクリプトを閉じてから、再度、それはエラーの下に私を示してコードを実行し、ありますポートをビジーに保ちます。だから私には上記のエラーが表示されます。これを解決するには、ソケットを閉じるコードがsock.close()
を殺し、sys.exit()
をPythonスクリプトを正しく終了する前に、これらの2つのコマンドを実行することを考えました。そのため、コードが強制終了される直前にこれらのコマンドを実行する方法を知る必要があります。私はKeyboardInterrupt
例外を使用することはできません。これは将来、これがサービスとして実行されるためです。
私はこれを見つけましたが、それを実装することはできません。answer例えば、私がしなければ:
import atexit
import time
def exit_handler():
print("STOPPED")
while True:
print("Running....")
time.sleep(1)
atexit.register(exit_handler)
これが実行されている続けているが、私は、コードを殺すときにStopped
を印刷しません。どのようにそれを実装するか、私の状況を処理するための代替方法があります。
おかげ
atexit
モジュールのドキュメントは重要な注意点があります
https://stackoverflow.com/a/1112350/5270506 –
https://stackoverflow.com/questions/4205317/capture-keyboardinterrupt:
だから、代わりにSIGTERMとSIGINTのためのハンドラを登録する必要があります-in-python-without-try-except –
@ Farhan.KIキーボード割り込みでコードを強制終了したくありません。このコードを開始または停止するサービスがあります。だからキーボードの割り込みを使用することはできません –