2016-11-29 6 views
3

저는 백그라운드에서 실행되는 파이썬 프로세스가 있으며, 스크립트가 종료 될 때만 일부 출력을 생성하고 싶습니다. 내가 터미널에서 kill {PID} 작업을 수행하는 경우 KeyboardInterupt 예외 sys.exit() 전화 handle_exit()을 높이는 호출파이썬 프로세스가 종료 될 때 atexit()를 실행하십시오.

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

atexit.register(handle_exit) 

제대로하지만 handle_exit를 호출하지 않고 스크립트를 종료().

백그라운드에서 실행중인 프로세스를 종료하고 종료하기 전에 handle_exit()을 실행하는 방법이 있습니까?

+1

atexit만으로는 불가능합니다. 문서에''이 모듈을 통해 등록 된 함수는 파이썬이 처리하지 않는 신호, 파이썬의 치명적인 내부 오류가 탐지되거나 os._exit()가 호출 될 때 프로그램이 종료 될 때 호출되지 않습니다. '[여기] (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

고마워,이게 내가 원하는거야. –