External Commands
To call other programs from a Python script
>>> import subprocess
simple use: same as one would do on the system command line, shell needs to be activated (not recommended)
>>> subprocess.call('ls -l',shell=True)
0 drwxrwsr-x 1 user group 0 Nov 27 18:44 .
4 drwxrwsr-x 1 user group 88 Nov 27 18:44 ..
better: command arguments as list which are passed directly to the program without using the system shell
>>> subprocess.call(['ls', '-l'])
0 drwxrwsr-x 1 user group 0 Nov 27 18:44 .
4 drwxrwsr-x 1 user group 88 Nov 27 18:44 ..
capturing the output
>>> cmd=['ls', '-l']
>>> output=subprocess.check_output(cmd).decode('utf-8').strip() # decode: python3 'bytes' into string
>>> print(output)
0 drwxrwsr-x 1 user group 0 Nov 27 18:44 .
4 drwxrwsr-x 1 user group 88 Nov 27 18:44 ..
capturing both output and command's error-messge (when running in a python script)
try:
output=subprocess.check_output('ls -l; ls x', \
stderr=subprocess.STDOUT,shell=True).decode('utf-8')
except subprocess.CalledProcessError as e:
output = e.output.decode('utf-8') # stdout and stderr
# print(e.cmd)
# print(e.returncode)
print(output)
0 drwxrwsr-x 1 user group 0 Nov 27 18:44 .
4 drwxrwsr-x 1 user group 88 Nov 27 18:44 ..
ls: cannot access x: No such file or directory
try:
cmd='ls x'
output = check_output(cmd,stderr=subprocess.STDOUT,shell=True).decode('utf-8');
except CalledProcessError as e:
print('ERROR:',e.returncode, e.output)
else:
print(output)