How to hide output of subprocess in Python 2.7 How to hide output of subprocess in Python 2.7 python python

How to hide output of subprocess in Python 2.7


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

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

For python <3.3, including 2.7 use:

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

It is effectively the same as running this shell command:

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


Here's a more portable version (just for fun, it is not necessary in your case):

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


Use subprocess.check_output (new in python 2.7). It will suppress stdout and raise an exception if the command fails. (It actually returns the contents of stdout, so you can use that later in your program if you want.) Example:

import subprocesstry:    subprocess.check_output(['espeak', text])except subprocess.CalledProcessError:    # Do something

You can also suppress stderr with:

    subprocess.check_output(["espeak", text], stderr=subprocess.STDOUT)

For earlier than 2.7, use

import osimport subprocesswith open(os.devnull, 'w')  as FNULL:    try:        subprocess._check_call(['espeak', text], stdout=FNULL)    except subprocess.CalledProcessError:        # Do something

Here, you can suppress stderr with

        subprocess._check_call(['espeak', text], stdout=FNULL, stderr=FNULL)