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.
For Python >= 2.7, use subprocess.check_output()
.
http://docs.python.org/2/library/subprocess.html#subprocess.check_output
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