本文介绍了如何通过espeak和aplay使用python Popen的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正尝试致电

espeak -ves -s130 'HEY' --stdout | aplay -D 'sysdefault'

通过subprocess.Popen,带有

through subprocess.Popen, with

espeak_process = Popen(["espeak", "-ves -s100 'HEY' --stdout"], stdout=subprocess.PIPE)
aplay_process = Popen(["aplay", "-D 'sysdefault'"], stdin=espeak_process.stdout, stdout=subprocess.PIPE)

但这不起作用

ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM  'sysdefault'
aplay: main:682: audio open error: No such file or directory

任何想法如何实现这一目标?谢谢

Any idea how to implement this?Thx

推荐答案

您的示例等效于在shell中键入以下内容:

Your example is the equivalent of typing this in the shell:

$ espeak '-ves -s100 \'HEY\' --stdout'
$ aplay '-D \'sysdefault\''

这显然是错误的.每个列表条目都是传递给可执行文件的一个参数(argv条目),无需在您身边进行转义/引用.所以您要使用:

Which is obviously wrong. Each list entry is one argument (argv entry) passed to the executable, no escaping/quoting needed on your side. So you want to use:

["aplay", "-D", "sysdefault"]
["espeak", "-ves", "-s100", "HEY", "--stdout"],

另请参见文档(重点是我的) :

Also see the documentation (emphasis mine):

这篇关于如何通过espeak和aplay使用python Popen的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-26 01:13