Python subprocess.call无法将标准输出发送到ffmpeg

Python subprocess.call无法将标准输出发送到ffmpeg,python,linux,subprocess,espeak,Python,Linux,Subprocess,Espeak,我的代码是python。它调用espeak命令生成.wav音频。然后调用ffmpeg将wav转换为mp3 但此命令不能通过python的subprocess.call将stdout从espeak发送到ffmpeg: espeak -f myfile --stdout | ffmpeg -i - final.mp3 例如: subprocess.call(["espeak", "test text to speak", "--stdout", "|"]+("ffmpeg -i - -vn -y

我的代码是python。它调用espeak命令生成.wav音频。然后调用ffmpeg将wav转换为mp3

但此命令不能通过python的subprocess.call将stdout从espeak发送到ffmpeg:

espeak -f myfile --stdout | ffmpeg -i - final.mp3
例如:

subprocess.call(["espeak", "test text to speak", "--stdout", "|"]+("ffmpeg -i - -vn -y -ar 22050 -ac 1 -ab 16k -af volume=2 -f mp3 mp3OutFile.mp3").split(" "))

错在哪里?我该怎么做?

您编写的管道由shell处理,除非您使用
shell=True
,否则将无法工作(如所写)。不要这样做,而是应该用Python构建管道,这对于
子流程来说非常简单:

p1 = subprocess.Popen(['espeak', '-f', 'myfile', '--stdout'], stdout=subprocess.PIPE)
p2 = subprocess.Popen(['ffmpeg', '-i', '-', 'final.mp3'], stdin=p1.stdout)
p1.stdout.close()  # pipe is already attached to p2, and unneeded in this process
p2.wait()
p1.wait()

您编写的管道由shell处理,除非您使用
shell=True
,否则将无法工作(如编写的那样)。不要这样做,而是应该用Python构建管道,这对于
子流程来说非常简单:

p1 = subprocess.Popen(['espeak', '-f', 'myfile', '--stdout'], stdout=subprocess.PIPE)
p2 = subprocess.Popen(['ffmpeg', '-i', '-', 'final.mp3'], stdin=p1.stdout)
p1.stdout.close()  # pipe is already attached to p2, and unneeded in this process
p2.wait()
p1.wait()

你能展示示例代码吗?我已经编辑添加了python代码。谢谢!如果您添加参数
shell=True
,那么该代码应该可以运行。但我更喜欢ephemient的答案。您能展示示例代码吗?我已经编辑添加python代码。谢谢!如果您添加参数
shell=True
,那么该代码应该可以工作……但我更喜欢ephemient的答案。