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