在python中使用子进程运行管道命令

在python中使用子进程运行管道命令,python,subprocess,Python,Subprocess,我试图在管道命令中使用sed,该命令带有subprocess.Popen和subprocess.PIPE。这似乎对我不起作用,我也不知道为什么 第一个示例使用trfine工作 from subprocess import Popen, PIPE p1 = Popen(["echo", "hello"], stdout=PIPE) p2 = Popen(["tr", "'h'", "'H'"], s

我试图在管道命令中使用sed,该命令带有
subprocess.Popen
subprocess.PIPE
。这似乎对我不起作用,我也不知道为什么

第一个示例使用
tr
fine工作

from subprocess import Popen, PIPE
p1 = Popen(["echo", "hello"], stdout=PIPE)
p2 = Popen(["tr", "'h'", "'H'"], stdin=p1.stdout, stdout=PIPE)
p2.wait()
但是,如果我尝试使用
sed
,我会得到一个退出代码=1

from subprocess import Popen, PIPE
p1 = Popen(["echo", "hello"], stdout=PIPE)
p2 = Popen(["sed", "'s/h/H/'"], stdin=p1.stdout, stdout=PIPE)
p2.wait()

答案是在
s/h/h/
周围使用lose单引号。在bash命令行上运行时需要它们,但在以这种方式运行Popen时不需要它们。