【问题标题】:Linking two subprocess output to another subprocesses input将两个子流程输出链接到另一个子流程输入
【发布时间】:2012-02-15 23:26:34
【问题描述】:

所以我这里有个问题。我有一个读取一个文件并将输出重定向到子进程管道的子进程。我有另一个做同样事情的子进程。我想要做的是在每个输出上运行一个 diff 命令。可能使用另一个子进程,但以某种方式从其他两个标准输出中读取。这是一个例子。

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)

如果有人不明白我的意思,我可以更好地解释,但希望如果您对子流程有所了解,那么您就会明白这一点。

【问题讨论】:

  • 我不认为可以这样做,因为一个进程只有一个标准输入。您可能需要将输出写入一些临时文件,然后在这些文件上运行第三个进程。
  • diff 作用于文件,所以你必须给它一些像文件一样嘎嘎作响的东西

标签: python subprocess pipe


【解决方案1】:
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)

这对输出不运行差异函数。它只是将两个程序引导到“合并”过程的输入。

无法读取导入单个管道的 2 个输入之间的差异。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-28
      • 2015-01-24
      • 2011-11-09
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 2017-05-08
      相关资源
      最近更新 更多