首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python和espeak和aplay

如何使用python和espeak和aplay
EN

Stack Overflow用户
提问于 2015-01-12 23:31:36
回答 1查看 1.1K关注 0票数 3

我想打电话给你

代码语言:javascript
复制
espeak -ves -s130 'HEY' --stdout | aplay -D 'sysdefault'

通过subprocess.Popen,与

代码语言:javascript
复制
espeak_process = Popen(["espeak", "-ves -s100 'HEY' --stdout"], stdout=subprocess.PIPE)
aplay_process = Popen(["aplay", "-D 'sysdefault'"], stdin=espeak_process.stdout, stdout=subprocess.PIPE)

但这不管用

代码语言:javascript
复制
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM  'sysdefault'
aplay: main:682: audio open error: No such file or directory

知道怎么实现吗?Thx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-12 23:50:59

您的示例相当于在shell中键入以下内容:

代码语言:javascript
复制
$ espeak '-ves -s100 \'HEY\' --stdout'
$ aplay '-D \'sysdefault\''

这显然是错误的。每个列表条目都是传递给可执行文件的一个参数(argv条目),不需要转义/引用。所以你想用:

代码语言:javascript
复制
["aplay", "-D", "sysdefault"]
["espeak", "-ves", "-s100", "HEY", "--stdout"],

还请参见文献资料 (重点是“地雷”):

所有调用都需要args,并且应该是一个字符串,或一个程序参数序列。提供参数序列的通常是首选的,因为它允许模块处理任何所需的转义和参数引用(例如,允许文件名中的空格)。如果传递单个字符串,则任一shell必须为True (见下文),或者字符串必须简单地命名要执行的程序,而不指定任何参数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27912586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档