【问题标题】:How to access local variables while handling ctrl-C event?如何在处理 ctrl-C 事件时访问局部变量?
【发布时间】:2019-08-10 08:29:36
【问题描述】:

我想知道是否可以访问在 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

无论 main() 一直到调用 reportOut() 的位置,还是流程被中断,我都希望 reportOut() 运行。

【问题讨论】:

    标签: python interrupt sigint


    【解决方案1】:

    您的信号处理程序需要访问变量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
    

    【讨论】:

    • 太棒了,谢谢,它有效。有助于了解最简单的方法和更好的方法。
    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 2018-10-30
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多