如何隐藏子进程的输出 [英] How to hide output of subprocess

查看:13
本文介绍了如何隐藏子进程的输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 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.

我该怎么做?

推荐答案

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

For python >= 3.3, Redirect the output to DEVNULL:

import os
import subprocess

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

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

For python <3.3, including 2.7 use:

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")

这篇关于如何隐藏子进程的输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆