【发布时间】:2021-09-20 10:55:46
【问题描述】:
这是 @Omry Yadan 在 2018 年 12 月 9 日的回答 How do subprocess.Popen pipes work in Python? 的后续问题。我需要创建一个三个程序管道并从所有三个程序中收集标准错误和返回代码。我当前的解决方案(如下)基于 2018 年 12 月 9 日的答案,挂起。粘贴到 shell 中的等效命令很快完成。
从标准输出到标准输入的数据量在 Mbyte 范围内。最终的标准输出以及三个标准错误预计会小得多。
#!/usr/bin/env python3
cmd1 = ["gzip", "-dc", "some_file.gz"]
cmd2 = ["filtering_program", "some", "arguments"]
cmd3 = ["collection_program", "some", "arguments"]
p1 = Popen(cmd1, stdout=PIPE, stderr=PIPE)
p2 = Popen(cmd1, stdin=p1.stdout, stdout=PIPE, stderr=PIPE)]
p3 = Popen(cmd1, stdin=p2.stdout, stdout=PIPE, stderr=PIPE)]
(outcome_stdout, outcome_stderr) = p3.communicate()
p1.wait()
p2.wait()
【问题讨论】:
标签: python python-3.x subprocess