Python:终端关闭时的对象破坏

时间:2012-09-26 22:56:21

标签: python

我需要创建一个足够灵活的代码来执行一些必需的清理,即使它运行的终端关闭或SSH连接丢失也是如此。我将所有必要的代码包装在一个类__del__方法中。但是,Python似乎并没有在退出时调用它(与C ++不同)。我试过了[atexit][1],但它也没有被调用。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

您需要使用signal模块。应该在关闭终端窗口或丢失SSH连接时将SIGHUP发送到您的程序。你可以抓住SIGINT而不是SIGHUP,但这是一个全能的解决方案。

import signal
import sys
def signal_handler(signal, frame):
    print 'Handling SIGHUP signal!'
    sys.exit(0)
signal.signal(signal.SIGHUHP, signal_handler)
print 'Waiting for SIGHUP'
signal.pause()

您可以通过在另一个终端窗口中发出sudo kill -1 <pid of your python process>来测试这一点。