Как поймать сигнал и передать переменную при выходе в Python? - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь поймать сигнал и передать переменную обработчику выхода.

Обработка сигнала Python3 signal.signal(signal.SIGINT, exit_handler), которую я сейчас использую, не может передать переменную.

Вот мой код:

import signal

def main(driver):
  ""
  # somecode

def exit_handler(sig, frame):
    driver.quit()
    db.update
    # etc
    exit()

if __name__ == '__main__':
    driver = ""
    database = ""
    signal.signal(signal.SIGINT, exit_handler) # pass variable to exit_handler
    exit()

Как это сделать?

1 Ответ

0 голосов
/ 15 сентября 2018

Обработчик должен быть вызываемым объектом, который при вызове принимает два аргумента (номер сигнала и текущий текущий кадр стека).Вы можете написать свой собственный объект, который эмулирует вызываемый объект, определив метод __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()

Если необходимые значения, хранящиеся в экземпляре обработчика, могут также обновляться в течение времени жизни сценария, который будет использоваться при его вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...