我正在使用 python 开发一个法语聊天机器人。对于第一次文本到语音的尝试,我正在使用 espeak 和 mbrola。我用 subprocess 调用它:
from subprocess import run, DEVNULL
def speak(text):
command = ["espeak", "-vmb-fr1", text]
run(command, stderr=DEVNULL, stdout=DEVNULL)
speak("Bonjour.")
如您所见,我将 stderr 和 stdout 发送到/dev/null
当我运行程序时,它似乎可以工作,espeak 正在说话,但我得到了这个:
*** Error in `mbrola': free(): invalid pointer: 0x08e3af18 ***
*** Error in `mbrola': free(): invalid pointer: 0x0988af88 ***
我认为这是 mbrola 中的 C 错误。我想我无法修复它。但它有效,所以我只想忽略错误。我能怎么做 ?有办法吗?
编辑,以回应abarnert:
当我通过 shell ( python myscript.py 2>&1 >/dev/null
) 重定向 stdout 和 stderr 时,消息仍然显示。
- 发行版:Debian 9.3
- glibc 版本:2.24