Python3管道将多个进程输出到单个进程

时间:2018-06-10 22:04:59

标签: python python-3.x subprocess pipe

我想将以下结构(显示在bash中)移植到python3子进程:

for i in 1 2 3
do
    echo $i
done | xargs -I {} echo bla {}

bla 1
bla 2
bla 3

如示例所示,多个进程一个接一个地运行,输出被多路复用为单个进程的输入。

我特别想在ramdisk等上使用管道,而不是文件/文件。可能无法使用。

我知道subprocess.PIPE,它可以和subprocess.communicate()一起使用,我想解决方案是这样的:

my_pipe = ?Pipe?()
for i in range(1, 4):
    subprocess.popen(['echo', '{}'.format(i)], stdout=my_pipe)

subprocess.popen(['xargs', '-I', '{}', 'echo', 'bla', '{}'], stding=my_pipe)

不幸的是,我不知道,?Pipe?应该是什么,我所看到的只有subprocess.PIPE& co。

可能很重要,我正在寻找适用于Linux的答案。

最初的问题出现在imagemagick的convert miff:- | convert -上。 (如果我给出的简化示例非常简单,那是有争议的。)

编辑:

也许我的例子不是很清楚,我尝试创建一些ASCII艺术:

我的目标(展开“for”循环表示):

->是stdout; ->是stdin

echo 1 -->+
          |
echo 2 -->+
          |
echo 3 -->+
          |
          +-------> xargs
            3 2 1

因此echo - s的输出,“for”循环中的命令被多路复用到xargs的单个标准输入中。

我不想创建过滤器管道:

echo 1 ->+
         |
         +-> echo 2 ->+
                      |
                      +-> echo 3 ->+
                                   |
                                   +-> xargs

可能的解决方法,但不是我想要的:

echo 1 ->+
         |
         +-> xargs

echo 2 ->+
         |
         +-> xargs

echo 3 ->+
         |
         +-> xargs

0 个答案:

没有答案