Python:在signal中传递两个以上的参数

时间:2016-12-07 20:31:44

标签: python signals

我知道当我使用信号时有两个参数(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)

2 个答案:

答案 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)