我使用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
时管道被关闭,此时从子进程写入的内容是否丢失?或者还有其他问题我在这里看不到?
答案 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()