程序 A 是一个 C 程序,它无休止地接收 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.stdinsys.stdout 保存到其他变量中也可能是一个好主意,这样如果您决定终止子进程,您可以将 stdin 和 stdout 恢复到它们的原始状态(例如终端)。

关于python - 我怎样才能让这两个进程(程序)直接使用管道相互通信?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4394765/

10-16 11:13