程序 A,是一个无休止地接收 stdin 中的输入、处理它并输出到 stdout 的 c 程序。
我想编写程序 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
保存到其他变量中也是一个好主意,这样如果您决定终止子进程,您可以恢复标准输入和标准输出到它们的原始状态(例如终端)。
关于python - 我怎样才能让这两个进程(程序)直接使用管道相互交谈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394765/