I want to get the output from some shell commands like ls
or df
in a python script. I see that commands.getoutput('ls')
is deprecated but subprocess.call('ls')
will only get me the return code.
I'll hope there is some simple solution.
This question is related to
python
shell
command
subprocess
Use subprocess.Popen:
import subprocess
process = 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
Source: Stackoverflow.com