将标准输出重定向到多处理.管道抛出错误



我想通过管道将新进程的stdoutstderr重定向回父进程。

我在另一个线程中找到了这段代码,该线程使用os.dup2()函数复制stdout.

import os
from multiprocessing import Process, Pipe
def spam(w):
os.dup2(w.fileno(), 1)
for i in range(3):
print('eggs')

if __name__ == '__main__':
r, w = Pipe()
reader = os.fdopen(r.fileno(), 'r')
p = Process(target=spam, args=(w,))
p.start()
for i in range(3):
print('From pipe: %s' % reader.readline())
reader.close()
p.join()

使用 Python 2.7,一切正常,但在主进程从管道读取消息后,Python 3 给了我一个无效的文件描述符错误。我不知道为什么会这样。 我尝试显式关闭文件处理程序,但它不起作用。

(我在 Linux 机器上运行它。

所以,事实证明关闭reader工作正常。

import os
from multiprocessing import Process, Pipe

def spam(w):
os.dup2(w.fileno(), 1)
for i in range(3):
print('eggs')

if __name__ == '__main__':
r, w = Pipe()
reader = os.fdopen(r.fileno(), 'r')
p = Process(target=spam, args=(w,))
p.start()
for i in range(3):
print('From pipe: %s' % reader.readline())
p.join()

最新更新