繁体   English   中英

如何使用python Popen与espeak和aplay

[英]How to use python Popen with a espeak and aplay

我正试着打电话

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

通过subprocess.Popen,用

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

知道如何实现这个吗? 谢谢

你的例子相当于在shell中输入:

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

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

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

另见文档 (强调我的):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM