Обработчик должен быть вызываемым объектом, который при вызове принимает два аргумента (номер сигнала и текущий текущий кадр стека).Вы можете написать свой собственный объект, который эмулирует вызываемый объект, определив метод __call__
и конструктор которого принимает один или несколько аргументов, которые вы можете использовать, чтобы использовать их при последующем вызове.Например:
import signal
import time
def main():
while True:
time.sleep(1)
class MyHandler:
def __init__(self, myvar):
self.myattr = myvar
def __call__(self, signo, frame):
print("My variable was:", self.myattr)
if __name__ == '__main__':
signal.signal(signal.SIGINT, MyHandler(123))
main()
Если необходимые значения, хранящиеся в экземпляре обработчика, могут также обновляться в течение времени жизни сценария, который будет использоваться при его вызове.