python - 我怎样才能让这两个进程(程序)直接使用管道相互交谈?

标签 python pipe stdout stdin stdio

程序 A,是一个无休止地接收 stdin 中的输入、处理它并输出到 stdout 的 c 程序。

我想编写程序 B(在 Python 中),以便它读取 A 的输出,并根据需要将其反馈。 请注意,每个程序都必须只有一个实例,因此给定 b1 和 b2,它们是 b 的实例,而不是:

$ b1 | a | b2

我需要

$ b1 | a | b1 

下面是最终想要的结果图:

alt text

最佳答案

使用 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 保存到其他变量中也是一个好主意,这样如果您决定终止子进程,您可以恢复标准输入和标准输出到它们的原始状态(例如终端)。

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

相关文章:

javascript - 如何将此 Python 标点符号去除功能转换为 JavaScript?

c++ - 使用 vfork 的多线程

javascript - 与 gdb 交互工作意外

Python 日志记录从多个进程重定向标准输出

python - 如何从 Python 函数调用中捕获标准输出输出?

python - django 1.8-如果表单条目查询结果与数据库不匹配,则在同一页面上显示警报消息,而不是 "None"或引发异常页面

python - Scrapy 抓取并跟踪 href 中的链接

python - pyspark 和 HDFS 命令

powershell - 通过 .lnk 文件通过管道传输到可执行文件

python - 如何将标准输出转换为字符串 (Python)