python – 如何让这两个进程(程序)直接使用管道相互通信?

程序A,是一个无休止的程序,在stdin中接收输入,处理它并将其输出到stdout.

我想编写程序B(在python中),因此它将读取A的输出,并将其反馈给任何需要的东西.
注意,每个程序必须只有一个实例,所以给定b1和b2是b的实例而不是:

$b1 | a | b2

我需要

$b1 | a | b1 

以下是最终期望结果的图表:

解决方法:

使用subprocess.Popen类为程序A创建子进程.例如:

import subprocess
import sys

# Create subprocess with pipes for stdin and stdout
progA = subprocess.Popen("a", stdin=subprocess.PIPE, stdout=subprocess.PIPE)

# Reassign the pipes to our stdin and stdout
sys.stdin = progA.stdout
sys.stdout = progA.stdin

现在,这两个进程可以通过管道相互通信.将原始sys.stdin和sys.stdout保存到其他变量中也是一个好主意,这样如果您决定终止子进程,则可以将stdin和stdout恢复到其原始状态(例如终端).

上一篇:创建一个cmd窗口并从C#应用程序写入它


下一篇:将文件内容重定向到php中的标准输入