我正在尝试创建一个程序,它会分叉子进程,然后监视它的标准输出。我的理解是,这应该可以通过创建一组管道fds,然后使用dup将管道的写入端设置为子节点中的STDOUT来实现。下面的代码试图这样做
import os
import sys
import time
pid = os.fork()
pr, pw = os.pipe()
if pid == 0: #Inside child
os.close(pr)
os.dup2(pw, sys.stdout.fileno())
print("Inside the child")
exit(1)
print("Inside parent, waiting for child output..")
result = os.read(pr, 1024)
print(result)
但是会产生破裂的管道。错误如下。
BrokenPipeError: [Errno 32] Broken pipe
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe
Traceback (most recent call last):
File "/tmp/master.py", line 14, in <module>
result = os.read(pr, 1024)
我看了几个例子,但似乎无法弄清楚我做错了什么。该错误表明管道的读取结束过早关闭,但情况似乎并非如此。