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)