您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python多处理:如何可靠地从子进程重定向stdout?

Python多处理:如何可靠地从子进程重定向stdout?

您建议的解决方案是一个很好的解决方案:手动创建您的进程,这样您就可以显式访问其stdout / stderr文件句柄。然后,您可以创建一个与子流程进行通信的套接字,并在该套接字上使用multiprocessing.connection(multiprocessing.Pipe创建相同类型的连接对象,因此应该为您提供所有相同的IPC功能)。

这是一个两个文件的示例。

import multiprocessing.connection
import subprocess
import socket
import sys, os

## Listen for connection from remote process (and find free port number)
port = 10000
while True:
    try:
        l = multiprocessing.connection.Listener(('localhost', int(port)), authkey="secret")
        break
    except socket.error as ex:
        if ex.errno != 98:
            raise
        port += 1  ## if errno==98, then port is not available.

proc = subprocess.Popen((sys.executable, "subproc.py", str(port)), stdout=subprocess.PIPE, stderr=subprocess.PIPE)

## open connection for remote process
conn = l.accept()
conn.send([1, "asd", None])
print(proc.stdout.readline())

import multiprocessing.connection
import subprocess
import sys, os, time

port = int(sys.argv[1])
conn = multiprocessing.connection.Client(('localhost', port), authkey="secret")

while True:
    try:
        obj = conn.recv()
        print("received: %s\n" % str(obj))
        sys.stdout.flush()
    except EOFError:  ## connection closed
        break

您可能还希望看到此问题的第一个答案,以从子流程中进行非阻塞读取。

python 2022/1/1 18:37:37 有389人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶