2011-12-20 3 views
3

파이썬 스크립트에서 파일 잠금을 사용하고 있습니다 (실행의 단일 인스턴스를 제어하기 위해). http://code.google.com/p/pylockfile/ 마지막으로 코드 블록에서 잠금을 해제합니다. 그러나 스크립트가 닫힌 경우 (예 : 실행중인 터미널 닫기) finally 블록이 실행되지 않고 파일이 잠긴 상태로 유지됩니다.스크립트에서 언로드 이벤트 (소멸자)

어쨌든 python 스크립트 소멸자 이벤트를 잡는 방법은 무엇입니까?

답변

2

이 주제와 관련하여 this blog post을 참조하십시오. Windows에서는 win32api를 사용하고 Linux에서는 SIGTERM 신호가 감지됩니다. 작동 여부를 확인하려면 다음과 같이 on_exit 처리기의 파일에 무엇인가를 작성하는 것이 좋습니다. 코드 조각은 아주 간단한이기 때문에, 난 그냥 (블로그 작성자에 대한 모든 소품)이 포함됩니다 : 당신이 그 프로그램을 실행하는 터미널을 닫을 경우

import os, sys 
def set_exit_handler(func): 
    if os.name == "nt": 
     try: 
      import win32api 
      win32api.SetConsoleCtrlHandler(func, True) 
     except ImportError: 
      version = '.'.join(map(str, sys.version_info[:2])) 
      raise Exception('pywin32 not installed for Python ' + version) 
    else: 
     import signal 
     signal.signal(signal.SIGTERM, func) 

if __name__ == '__main__': 
    def on_exit(sig, func=None): 
     f = open('log.txt', 'w') 
     f.write('shutdown...') 
     f.close() 
     sys.exit() 
    set_exit_handler(on_exit) 
    print 'Press to quit' 
    raw_input() 
    print 'quit!' 

를, 그것은 콜백 기능을 확인하기 위해 파일을 만듭니다.