我知道当我使用信号时有两个参数(signum和frame)。
但如果我想发送更多内容怎么办?例如:对象为自己。
我该怎么做?
示例:
def terminate_handler(signum, frame, self):
self.close()
signal.signal(signal.SIGINT, terminate_handler, object)
编辑:当我认为它无法正常工作时,我发现了我在飞行中晃动的解决方案。我不知道它会起作用
def terminate_handler(self, signum, frame):
self.close()
signal.signal(signal.SIGINT, terminate_handler, object)
答案 0 :(得分:2)
为什么不
def terminate_handler(self, signum, frame):
self.close()
signal.signal(signal.SIGINT, partial(terminate_handler, obj))
这是一个完全有效的例子(kill -2 ...)
import signal, os, sys
from functools import partial
from time import sleep
def terminate_handler(self, signum, frame):
print('terminate_handler:', self, signum)
sys.exit(0)
signal.signal(signal.SIGINT, partial(terminate_handler, 'foo'))
while True:
sleep(1)
答案 1 :(得分:0)
另一种选择是使用 lambda 函数,并在闭包中传递变量:
import signal
import time
def real_handler(signum, frame, arg1):
print(arg1)
exit(1)
signal.signal(signal.SIGINT, lambda signum, frame: real_handler(signum, frame, 'foo'))
while True:
time.sleep(1)