为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2019-06-16 13:37:29
如何在Python2.7中隐藏子进程的输出我在Ubuntu上使用eS匹克,并有一个Python2.7脚本,它可以打印并发出消息:import subprocess text = 'Hello World.'print text subprocess.call(['espeak', text])eS匹克会产生所需的声音,但是会使shell充满一些错误(ALSAlib.,没有套接字连接),所以我无法轻松地读取前面打印的内容。出口代码是0。不幸的是,没有文档化的选项来关闭它的冗长,所以我正在寻找一种方法,只在视觉上沉默它,并保持打开的外壳干净,以便进一步的交互。我该怎么做?
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

这里有一个更可移植的版本(只是为了好玩,在您的情况下没有必要):

#!/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



查看完整回答
反对 回复 2019-06-16
?
森林海

TA贡献2011条经验 获得超2个赞

使用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)


查看完整回答
反对 回复 2019-06-16
  • 3 回答
  • 0 关注
  • 760 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信