When running bash command using subprocess, I might run into situation where the command is not valid. In this case, bash would return an error messsage. How can we catch this message? I would like to save this message to a log file. The following is an example, where I try to list files in a non-existed directory.
try:
subprocess.check_call(["ls", "/home/non"])
df = subprocess.Popen(["ls", "/home/non"], stdout=subprocess.PIPE)
output, err = df.communicate()
# process outputs
except Exception as error:
print error
sys.exit(1)
Bash would prints "ls: cannot access /home/non: No such file or directory". How can I get this error message? The error caught by the except line is clearly different, it says "Command '['ls', '/home/non']' returned non-zero exit status 2".
"ls: cannot access /home/non: No such file or directory" is generated by
ls
command, notbash
here.If you want to handle non-existing files using exception handling then use
subprocess.check_output()
:Output
You can redirect stderr to a file object:
Output to log.txt:
If you want the message in the except:
For python 2.6 the
e.message
won't work. You can use a similar version of python 2.7'scheck_output
that will work with python 2.6: