Search code examples
pythonstdoutstdioos.system

Redirecting stdio from a command in os.system() in Python


Usually I can change stdout in Python by changing the value of sys.stdout. However, this only seems to affect print statements. So, is there any way I can suppress the output (to the console), of a program that is run via the os.system() command in Python?


Solution

  • You could consider running the program via subprocess.Popen, with subprocess.PIPE communication, and then shove that output where ever you would like, but as is, os.system just runs the command, and nothing else.

    from subprocess import Popen, PIPE
    
    p = Popen(['command', 'and', 'args'], stdout=PIPE, stderr=PIPE, stdin=PIPE)
    
    output = p.stdout.read()
    p.stdin.write(input)
    

    Much more flexible in my opinion. You might want to look at the full documentation: Python Subprocess module