如何在 Python 2.7 中隐藏子进程的输出 [英] How to hide output of subprocess in Python 2.7
问题描述
我在 Ubuntu 上使用 eSpeak 并且有一个 Python 2.7 脚本可以打印和说出一条消息:
I'm using eSpeak on Ubuntu and have a Python 2.7 script that prints and speaks a message:
import subprocess
text = 'Hello World.'
print text
subprocess.call(['espeak', text])
eSpeak 产生了所需的声音,但由于一些错误(ALSA lib...,没有套接字连接)使外壳混乱,因此我无法轻松阅读之前打印的内容.退出代码为 0.
eSpeak produces the desired sounds, but clutters the shell with some errors (ALSA lib..., no socket connect) so i cannot easily read what was printed earlier. Exit code is 0.
不幸的是,没有记录选项可以关闭它的冗长,所以我正在寻找一种方法来仅在视觉上使其静音并保持打开的外壳清洁以便进一步交互.
Unfortunately there is no documented option to turn off its verbosity, so I'm looking for a way to only visually silence it and keep the open shell clean for further interaction.
我该怎么做?
推荐答案
将输出重定向到 DEVNULL:
Redirect the output to DEVNULL:
import os
import subprocess
FNULL = open(os.devnull, 'w')
retcode = subprocess.call(['echo', 'foo'],
stdout=FNULL,
stderr=subprocess.STDOUT)
它实际上与运行此 shell 命令相同:
It is effectively the same as running this shell command:
retcode = os.system("echo 'foo' &> /dev/null")
更新:此答案适用于与 python 2.7 相关的原始问题.从 python >= 3.3 开始,添加了一个官方 subprocess.DEVNULL
符号.
Update: This answer applies to the original question relating to python 2.7. As of python >= 3.3 an official subprocess.DEVNULL
symbol was added.
retcode = subprocess.call(['echo', 'foo'],
stdout=subprocess.DEVNULL,
stderr=subprocess.STDOUT)
这篇关于如何在 Python 2.7 中隐藏子进程的输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!