在以p.terminate()终止的进程中写入sigterm上的日志文件

时间:2016-11-18 11:47:35

标签: python subprocess sigterm

我使用p.terminate终止我的子流程,我这样打开了:

p = Popen([sys.executable, args], stdin=PIPE, stdout=PIPE, stderr=open("error.txt", 'a'))

正如您所看到的,我将所有错误重定向到文本文件,以便我可以每天阅读它。 当子进程终止时,我错过了使用此功能将内容打印到此文件中:

signal.signal(signal.SIGTERM, sigterm_handler) # sets shutdown_flag
while True:
    if shutdown_flag:
        print("Some Useful information", file=sys.stderr)

但是:文件始终为空。这是因为在调用terminate时管道被关闭,此时从子进程写入的内容是否丢失?或者还有其他问题我在这里看不到?

1 个答案:

答案 0 :(得分:0)

通常,终止线程不是一个好主意。相反,你应该要求它使用threading.Event。

结束
event = threading.Event() 
while not event.isSet():   # use this instead of while True:
    #  do your stuff

# now write your file
print("Some Useful information", file=sys.stderr)

然后,使用:

而不是p.terminate()
threading.Event().set()