30

How do you stop the output from subprocess.Popen from being output? Printing can sometimes be slow if there is a great deal of it.

nihiser
  • 604
  • 1
  • 15
  • 28
coffee
  • 303
  • 1
  • 3
  • 4
  • Almost duplicate of [python - How to hide output of subprocess - Stack Overflow](https://stackoverflow.com/questions/11269575/how-to-hide-output-of-subprocess) (Popen versus call) – user202729 Dec 05 '21 at 16:49

3 Answers3

30

In Python 3.3+ you could use subprocess.DEVNULL, to suppress the output:

from subprocess import DEVNULL, STDOUT, check_call

check_call([cmd, arg1, arg2], stdout=DEVNULL, stderr=STDOUT)

Remove stderr=STDOUT if you don't want to suppress stderr also.

jfs
  • 399,953
  • 195
  • 994
  • 1,670
30

If you want to totally throw it away:

import subprocess
import os
with open(os.devnull, 'w') as fp:
    cmd = subprocess.Popen(("[command]",), stdout=fp)

If you are using Python 2.5, you will need from __future__ import with_statement, or just don't use with.

Brent Newey
  • 4,479
  • 3
  • 29
  • 33
0

This also worked for me (Python 3.6, Ubuntu Linux OS):

subprocess.Popen(cmd, shell=False, stdout=DEVNULL)

-This assumes you want non blocking call and no junk in the console from the cmd.