Python Subprocess.call和--stdout

Python Subprocess.call和--stdout,python,raspberry-pi,subprocess,stdout,espeak,Python,Raspberry Pi,Subprocess,Stdout,Espeak,它的输出将只是大量特殊角色的输出,而不是来自espeak的音频。当我键入此项时: subprocess.call(["espeak", "-s 5 -ven", "where are you", "--stdout", 'shell=True', "aplay"]) 然后会听到音频,但有时会出现讲话速度慢的问题,以及以下消息的输出: subprocess.call(["espeak", "-s 5 -ven", "where are you", 'shell=True', "aplay"])

它的输出将只是大量特殊角色的输出,而不是来自espeak的音频。当我键入此项时:

subprocess.call(["espeak", "-s 5 -ven", "where are you", "--stdout", 'shell=True', "aplay"])
然后会听到音频,但有时会出现讲话速度慢的问题,以及以下消息的输出:

subprocess.call(["espeak", "-s 5 -ven", "where are you", 'shell=True', "aplay"])
有人能解释一下stdout在这里的意思吗?为什么它会导致上述错误

来自:

--stdout

在生成语音输出时将其写入标准输出,而不是将其说出。 数据以WAV文件头开始,该文件头 指示数据的采样率和格式。长度字段为 设置为零,因为当标头 生产

对于
杰克服务器未运行或无法启动
错误检查解决方案:

您是否已安装alsa软件包(键入“alsa”和tab键) 两次,您应该看到一些以alsa开头的命令?如果是 未安装,请使用

ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
无论如何,此错误不应阻止
espeak
工作。您可以通过将
stderr
重定向到
/dev/null
来删除它,如下所示:

sudo apt-get install alsa-tools alsa-utils
另外请注意,您正在使用
shell=True
作为
espeak
的参数之一,它实际上应该是
调用
方法本身的参数。
拆下它。

ALSA已经在那里了。添加2>/dev/null仍然不起作用。还是一样。@sam你说还是一样是什么意思?错误“jack服务器未运行或无法启动”?或者别的什么?我键入:
子进程调用([“espeak”、“-s5-ven”、“你在哪里”、“2>/dev/null”、“shell=True”、“aplay”])
结果是
jack服务器没有运行或无法启动
@sam你安装了
jackd
sudo-apt-get-install-jackd
@sam-btw,添加“2>/dev/null”不是导致
call
method将stderr重定向到
/dev/null
的正确方法。请在我的回答中看看如何做对。
FNULL = open(os.devnull, 'w')
retcode = subprocess.call(["espeak", "-s 5", "-ven", "where are you", "aplay"], stdout=FNULL, stderr=subprocess.STDOUT)