我的目标是让pico2wave用python说话。
我的代码
cl = 'pico2wave --lang=de-DE --wave=/tmp/test.wav "Test"'
print(cl)
tempFile = '/dev/null'
with open(tempFile, "w+") as f:
process = subprocess.Popen(cl, stdout=f, shell=True)
cl = 'aplay /tmp/test.wav'
print(cl)
process = subprocess.Popen(cl, stdout=f, shell=True)
cl = 'rm -f /tmp/test.wav'
print(cl)
process = subprocess.Popen(cl, stdout=f, shell=True)
在命令行中使用打印输出有效。但是使用python代码却没有。为什么?
您没有等待任何过程完成。为了使其等效于逐个运行shell命令,您需要在每个process.wait()
之后放置一个Popen
调用,以便该命令在启动下一个进程之前完成。在这种情况下,aplay
取决于pico2wave
写出aplay
的输入,并且取决于rm
在有机会打开它并读取内容之前不删除它。
没有process.wait()
,就像在shell中运行(请注意将&
作为背景:
pico2wave --lang=de-DE --wave=/tmp/test.wav "Test" &
aplay /tmp/test.wav &
rm -f /tmp/test.wav &
介绍各种可怕的比赛条件。