我有一个程序需要很长时间才能完成。我想要
它能够捕获SIGINT(ctrl-c)并调用self.save_work()方法。
从目前来看,我的signal_hander()不起作用
self不是由程序到达signal_handler()时定义的。
如何设置它,以便self.save_workSIGINT之后被调用?

#!/usr/bin/env python
import signal

def signal_handler(signal, frame):
    self.save_work()   # Does not work
    exit(1)
signal.signal(signal.SIGINT, signal_handler)

class Main(object):
    def do_stuff(self):
        ...
    def save_work(self):
        ...
    def __init__(self):
        self.do_stuff()
        self.save_work()

if __name__=='__main__':
    Main()

最佳答案

如果您只想捕获ctr+c,那么可以捕获KeyboardInterrupt异常:

class Main(object):
    def do_stuff(self):
        ...
    def save_work(self):
        ...
    def __init__(self):
        try:
            self.do_stuff()
        except KeyboardInterrupt:
            pass # Or print helpful info
        self.save_work()

我不认为这是个好设计。看起来您需要使用函数而不是构造函数。

关于python - SIGINT之后保存工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1674300/

10-16 22:16