如何在处理 ctrl-C 事件时访问局部变量?
How to access local variables while handling ctrl-C event?
我想知道是否可以在 ctrl-C 中断流程时访问函数 运行ning 的局部变量。例如,当按下 ctrl-C 时 main() 为 运行ning:
def main(myInfo):
signal.signal(signal.SIGINT, KeyboardBreak)
reportOut(myInfo)
def KeyboardBreak(signum, frame):
reportOut(myInfo)
def reportOut(myInfo):
print myInfo
我希望 reportOut() 运行 main() 是否一直到它调用 reportOut() 的地方,或者流程是否中断。
您的信号处理程序需要访问变量 myInfo
。最简单的方法是定义 KeyboardBreak()
inside 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
我想知道是否可以在 ctrl-C 中断流程时访问函数 运行ning 的局部变量。例如,当按下 ctrl-C 时 main() 为 运行ning:
def main(myInfo):
signal.signal(signal.SIGINT, KeyboardBreak)
reportOut(myInfo)
def KeyboardBreak(signum, frame):
reportOut(myInfo)
def reportOut(myInfo):
print myInfo
我希望 reportOut() 运行 main() 是否一直到它调用 reportOut() 的地方,或者流程是否中断。
您的信号处理程序需要访问变量 myInfo
。最简单的方法是定义 KeyboardBreak()
inside 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