Python 子进程中的内部管道使用列表参数?

Python internal pipe in subprocess using list arguments?

可以像这样创建子流程...

commandlist = ['cat', '/some/file']

sp = subprocess.Popen(commandlist)

但是是否可以将该序列的输出通过管道传输到同一子进程内的另一个命令中?

例如,sequence/list 等同于 cat /some/file | sed 's/foo/bar/' 是什么?

我想避免在 shell=True 中使用字符串输入,并且想知道是否可以在不创建 2 个子进程的情况下完成。

谢谢, 克里斯

管道语法是一个 shell 结构,因此您可以使用 shell 来执行它:

sp = subprocess.Popen("cat /some/file | sed 's/foo/bar/'", shell=True)

但是管道本身限于shell,所以你可以在Python中建立管道:

sp1 = subprocess.Popen(['cat', '/some/file'], stdout=subprocess.PIPE)
sp2 = subprocess.Popen(['sed', 's/foo/bar'], stdin=sp1.stdout)