将两个子进程输出链接到另一个子进程输入

时间:2012-02-15 23:26:34

标签: python subprocess pipe

所以我在这里遇到了问题。我有一个子进程读取一个文件并将输出重定向到子进程管道。我有另一个子进程完成相同的事情。我想要做的是在每个输出上运行diff命令。可能使用另一个子进程,但不知何故从其他两个stdouts读取。这是一个例子。

proc1 = subprocess.Popen(['samtools', 'view', 'file1'], stdout=subprocess.PIPE)
proc2 = subprocess.Popen(['samtools', 'view', 'file2'], stdout=subprocess.PIPE)

理论上这就是我想要做的......

proc3 = subprocess.Popen(['diff', proc1.communicate()[0], proc2.communicate()[0]], stdout=subprocess.PIPE)

如果有人不明白我的意思,我可以更好地解释,但希望如果你对子过程有所了解,那么你会得到这个。

2 个答案:

答案 0 :(得分:0)

我想说实现这一目标的一个好方法是将两个初始进程的输出重定向到两个不同的named pipes,并在第三个进程中将它们用作文件来获取输入。

答案 1 :(得分:0)

import os
from subprocess import Popen, PIPE

outside, inside = os.pipe()

one = Popen(['/path/to/one'], stdout = inside)
two = Popen(['/path/to/two'], stdout = inside)

merge = Popen(['/path/to/merge'], stdin = outside)

这在输出上不运行diff功能。它只是将两个程序引导到“合并”过程的输入。

读取引入单个管道的2个输入之间的差异是不可能的。