将标准输出重定向到 multiprocessing.Pipe 会引发错误
Redirecting stdout to multiprocessing.Pipe throws error
我想通过管道将新进程的 stdout
和 stderr
重定向回父进程。
我在 中找到了这段代码,它使用 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()
我想通过管道将新进程的 stdout
和 stderr
重定向回父进程。
我在 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()