脚本卸载事件(析构函数)上的python

时间:2011-12-20 10:36:22

标签: python locking destructor

我在python脚本中使用文件锁定(控制它执行的单个实例)。 http://code.google.com/p/pylockfile/ 我在最后的代码块中释放锁定。 但是,如果脚本关闭,例如关闭运行它的终端,则finally块不会执行,文件将保持锁定状态。

如何在任何情况下捕获python脚本析构函数?

1 个答案:

答案 0 :(得分: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!'

如果您将关闭运行该程序的终端,它将创建一个文件来验证回调功能。