python - 如何隐藏子进程的输出

标签 python subprocess espeak

我在 Ubuntu 上使用 eSpeak,并且有一个 Python 2.7 脚本,可以打印并说出一条消息:

import subprocess
text = 'Hello World.'
print text
subprocess.call(['espeak', text])

eSpeak 会产生所需的声音,但会因为一些错误(ALSA lib...,没有套接字连接)而使外壳困惑,因此我无法轻松阅读之前打印的内容。退出代码为 0。

不幸的是,没有记录的选项可以关闭它的冗长,所以我正在寻找一种方法来仅在视觉上使其静音并保持打开的外壳清洁以进行进一步的交互。

我该怎么做?

最佳答案

对于 python >= 3.3,将输出重定向到 DEVNULL:

import os
import subprocess

retcode = subprocess.call(['echo', 'foo'], 
    stdout=subprocess.DEVNULL,
    stderr=subprocess.STDOUT)

对于python <3.3,包括2.7使用:

FNULL = open(os.devnull, 'w')
retcode = subprocess.call(['echo', 'foo'], 
    stdout=FNULL, 
    stderr=subprocess.STDOUT)

实际上和运行这个 shell 命令是一样的:

retcode = os.system("echo 'foo' &> /dev/null")

关于python - 如何隐藏子进程的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269575/

相关文章:

python - Matplotlib 中的重复刻度标签

python - 运行 shell 命令并捕获输出

python - 从异步子进程读取流输出

python curl 执行带参数的命令

Python:顺序调用子进程(在本例中为 espeak)

python - 设备上没有剩余空间后无法删除文件

Python - Urllib.Request - 更改下载文件的位置

python - 如何设置 Tkinter 小部件的大小(以像素为单位)?

python - 如何使用 voice.ID 改变 pyttxs 上的声音?

c++ - 如何查找espeak是否结束了演讲?