Вашему обработчику сигнала необходим доступ к переменной myInfo
.Самый простой способ сделать это - определить KeyboardBreak()
внутри main()
, чтобы он имел доступ к myInfo
через замыкание.
def main(myInfo):
def KeyboardBreak(signum, frame):
reportOut(myInfo)
signal.signal(signal.SIGINT, KeyboardBreak)
reportOut(myInfo)
def reportOut(myInfo):
print myInfo
Кроме того, вы можете написать фабрикуфункция, которая создает ваш обработчик сигнала, снова используя замыкание для удержания myInfo
.Этот подход, вероятно, лучше всего подходит, когда любая из этих функций является сложной.
def main(myInfo):
signal.signal(signal.SIGINT, KeyboardBreakFactory(myinfo))
reportOut(myInfo)
def KeyboardBreakFactory(myinfo):
def KeyboardBreak(signum, frame):
reportOut(myInfo)
return KeyboardBreak
def reportOut(myInfo):
print myInfo