我遇到了this回复的帖子,它似乎表明作为信号处理程序安装的闭包应该捕获它们的环境,但是我没有看到(使用python2.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
块可以替换整个主线程以获得相同的结果。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐