python:multiprocessing.Pipe 和重定向标准输出

标签 python multiprocessing pipe dup2

我正在使用 multiprocessing 包生成第二个进程,我希望将 stdout 和 stderr 重定向到第一个进程。我正在使用 multiprocessing.Pipe 对象:

dup2(output_pipe.fileno(), 1)

其中output_pipemultiprocessing.Pipe的实例。然而,当我尝试在另一端阅读时,它就挂起了。我尝试使用带有限制的 Pipe.recv_bytes 进行读取,但这会引发 OSError。这是否可能,或者我应该切换到一些较低级别的管道功能?

最佳答案

在 Python 2.7 中进行实验后,我得到了这个工作示例。使用 os.dup2 ,管道的文件描述符被复制到标准输出文件描述符,并且每个 print 函数最终都会写入管道。

import os
import multiprocessing


def tester_method(w):
    os.dup2(w.fileno(), 1)

    for i in range(3):
        print 'This is a message!'


if __name__ == '__main__':
    r, w = multiprocessing.Pipe()

    reader = os.fdopen(r.fileno(), 'r')

    process = multiprocessing.Process(None, tester_method, 'TESTER', (w,))
    process.start()

    for i in range(3):
        print 'From pipe: %s' % reader.readline()

    reader.close()
    process.join()

输出:

From pipe: This is a message!

From pipe: This is a message!

From pipe: This is a message!

关于python:multiprocessing.Pipe 和重定向标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48713062/

相关文章:

python - SQLAlchemy - 多线程持久对象创建,如何合并回单个 session 以避免状态冲突?

python - Python中的正则表达式在字母串之后获取数字串

Python 文件重命名和分割

python multiprocessing starmap vs apply_async,哪个更快?

linux - 如果一端先于另一端关闭,Linux pipe() 会发生什么

linux - 如何通过管道传输到 Linux split 命令?

bash - 将 mplayer 的输出写入 fifo 并读取

python - 函数的惰性求值

python 多进程与两个列表比较

python - 多处理 "OSError: [Errno 24] Too many open files": How to clean up jobs and queues?