Python:信号处理程序关闭不捕获环境

时间:2017-03-23 15:39:42

标签: python python-2.7 signals

我遇到了this回复的帖子,似乎表明安装了闭包,因为信号处理程序应该捕获他们的环境,但是我没有看到(使用Python 2.7)。例如:

import os
import signal
import time

if __name__ == "__main__":
    pid = os.fork()
    if pid:
        signal.pause()
    else:
        sigint = False

        def handler(s, f):
            # global sigint
            print "sigint: {}".format(sigint)
            print "Signal handler"
            sigint = True

        signal.signal(signal.SIGINT, handler)

        signal.pause()
        if sigint:
            print "Caught sigint, sleeping briefly"
            time.sleep(2)
        print "exiting..."

使用^ C运行和触发会在孩子中引发UnboundedLocalError: local variable 'sigint' referenced before assignment。取消注释global声明修复此问题。显然这与前面提到的帖子不一致,上一篇文章是不正确的,还是我在这里做错了什么?

编辑:这里的分叉也完全是无关紧要的,当我注意到这个时,我打算调查一个不同的行为,并且只是逐字地接受了这个小脚本。 else块可以替换整个主线程以获得相同的结果。

0 个答案:

没有答案