我想将以下结构(显示在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