如何在处理ctrl-C事件时访问本地变量?

3

我想知道是否有可能在ctrl-C中断流程时访问局部变量。例如,当按下ctrl-C时,main()正在运行:

def main(myInfo):
    signal.signal(signal.SIGINT, KeyboardBreak)
    reportOut(myInfo)

def KeyboardBreak(signum, frame):
    reportOut(myInfo)

def reportOut(myInfo):
    print myInfo

我希望 reportOut() 函数无论是在 main() 函数中一路调用到最后,还是被中断,都能够运行。
1个回答

1
您的信号处理程序需要访问变量myInfo。最简单的方法是在main()内部定义KeyboardBreak(),以便通过闭包访问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

太棒了,谢谢,它起作用了。看到最简单的方法和更好的方法都很有帮助。 - m100psi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接