python getoutput() equivalent in subprocess [duplicate] python getoutput() equivalent in subprocess [duplicate] python python

python getoutput() equivalent in subprocess [duplicate]


Use subprocess.Popen:

import subprocessprocess = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)out, err = process.communicate()print(out)

Note that communicate blocks until the process terminates. You could use process.stdout.readline() if you need the output before it terminates. For more information see the documentation.


To catch errors with subprocess.check_output(), you can use CalledProcessError. If you want to use the output as string, decode it from the bytecode.

# \return String of the output, stripped from whitespace at right side; or None on failure.def runls():    import subprocess    try:        byteOutput = subprocess.check_output(['ls', '-a'], timeout=2)        return byteOutput.decode('UTF-8').rstrip()    except subprocess.CalledProcessError as e:        print("Error in ls -a:\n", e.output)        return None