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

2024-04-19 11:39:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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时管道关闭了,此时从子进程写入的内容丢失了吗?还是有其他我看不到的问题?你知道吗


Tags: 文件内容signal进程错误stderrstdinsys
1条回答
网友
1楼 · 发布于 2024-04-19 11:39:35

一般来说,终止线程不是一个好主意。相反,你应该要求它停止使用线程。事件. 你知道吗

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()

相关问题 更多 >