如何在处理 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