如何在Python2.7中隐藏子进程的输出

如何在Python2.7中隐藏子进程的输出

我在Ubuntu上使用eS匹克,并有一个Python2.7脚本,它可以打印并发出消息:

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

eS匹克会产生所需的声音,但是会使shell充满一些错误(ALSAlib.,没有套接字连接),所以我无法轻松地读取前面打印的内容。出口代码是0。

不幸的是,没有文档化的选项来关闭它的冗长,所以我正在寻找一种方法,只在视觉上沉默它,并保持打开的外壳干净,以便进一步的交互。

我该怎么做?


月关宝盒
浏览 761回答 3
3回答

鸿蒙传说

这里有一个更可移植的版本(只是为了好玩,在您的情况下没有必要):#!/usr/bin/env python# -*- coding: utf-8 -*-from subprocess import Popen, PIPE, STDOUTtry:     from subprocess import DEVNULL # py3kexcept ImportError:     import os     DEVNULL = open(os.devnull, 'wb')text = u"René Descartes"p = Popen(['espeak', '-b', '1'],      stdin=PIPE, stdout=DEVNULL, stderr=STDOUT)p.communicate(text.encode('utf-8'))assert p.returncode == 0      # use appropriate for your program error handling here

森林海

使用subprocess.check_output(新增于python 2.7)。如果命令失败,它将抑制stdout并引发异常。(它实际上返回stdout的内容,因此您可以在以后的程序中使用它(如果需要的话)。)例子:import subprocesstry:     subprocess.check_output(['espeak', text])except subprocess.CalledProcessError:     # Do something您还可以使用以下方法来抑制stderr:    subprocess.check_output(["espeak", text], stderr=subprocess.STDOUT)在2.7之前,使用import osimport subprocesswith open(os.devnull, 'w')  as FNULL:     try:         subprocess._check_call(['espeak', text], stdout=FNULL)     except subprocess.CalledProcessError:         # Do something在这里,您可以使用        subprocess._check_call(['espeak', text], stdout=FNULL, stderr=FNULL)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python