2016-11-29 229 views
3

我有一個在後臺運行的python進程,我希望它只在腳本終止時才生成一些輸出。當python進程死亡時運行atexit()

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

atexit.register(handle_exit) 

調用養KeyboardInterupt例外,sys.exit()電話handle_exit()正常,但如果我從終端做kill {PID}則終止該腳本,而無需調用handle_exit()。

有沒有辦法終止在後臺運行的進程,並且在終止之前仍然運行handle_exit()

+1

單獨使用atexit不可能。正如文檔所指出的那樣'當程序被非Python處理的信號終止時,當檢測到Python致命內部錯誤或調用os._exit()時,不會調用通過此模塊註冊的函數。「[here] (https://docs.python.org/2/library/atexit.html) –

回答

5

嘗試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

謝謝,這正是我正在尋找的。 –