2016-11-29 79 views
3

私はバックグラウンドで実行されるpythonプロセスを持っていますが、スクリプト終了時にのみ出力を生成したいと思います。私は端末からkill {PID}を行うとしたらKeyboardInterupt例外とsys.exit()通話handle_exit()を上げ呼び出すPythonプロセスが終了したときにatexit()を実行する

def handle_exit(): 
    print('\nAll files saved in ' + directory) 
    generate_output() 

atexit.register(handle_exit) 

が正しく、それはhandle_exitを呼び出さずにスクリプトを終了します()。

バックグラウンドで実行されているプロセスを終了する方法はありますか?終了する前にhandle_exit()を実行していますか?

+1

atexitだけでは不可能です。ドキュメントが ''このモジュールを介して登録された関数は、Pythonで処理されないシグナル、Pythonの致命的な内部エラーが検出されたとき、またはos._exit()が呼び出されたときに、 (https://docs.python.org/2/library/atexit.html) –

答えて

5

Try signal.signal

import signal 

def handle_exit(): 
    print('\nAll files saved in ' + directory) 
    generate_output() 

atexit.register(handle_exit) 
signal.signal(signal.SIGTERM, handle_exit) 
signal.signal(signal.SIGINT, handle_exit) 

が今、あなたはkill {pid}handle_exitが実行されることができます。これは、任意のシステムの信号をキャッチすることができます。

+0

ありがとう、これは私が探しているものです。 –

関連する問題