Python – Suppress output in Python calls to executables


I have a binary named A that generates output when called. If I call it from a Bash shell, most of the output is suppressed by A > /dev/null. All of the output is suppressed by A &> /dev/null

I have a python script named B that needs to call A. I want to be able to generate output from B, while suppressing all the output from A.

From within B, I've tried os.system('A'), os.system('A > /dev/null'), and os.system('A &> /dev/null'), os.execvp('...'), etc. but none of those suppress all the output from A.

I could run B &> /dev/null, but that suppresses all of B's output too and I don't want that.

Anyone have suggestions?

Best Solution

import os
import subprocess

command = ["executable", "argument_1", "argument_2"]

with open(os.devnull, "w") as fnull:
    result =, stdout = fnull, stderr = fnull)

If the command doesn't have any arguments, you can just provide it as a simple string.

If your command relies on shell features like wildcards, pipes, or environment variables, you'll need to provide the whole command as a string, and also specify shell = True. This should be avoided, though, since it represents a security hazard if the contents of the string aren't carefully validated.