{{tag>dev python command sysadmin}}
===== Python: Invoquer une commande ======
Pour invoquer une commande depuis un script, si les valeurs retournées sur stdout et stderr n'ont pas d'importance, le plus simple:
from os import system as run_command
# La commande a exécuter
cmd=r'whereis snmpget'
# res sauvegarde la valeur de retour de la commande
res = run_command(cmd)
Python 3.5 introduit la méthode subprocess.run() recommandée quand c'est possible
import subprocess
cpo = subprocess.run(['/path/to/command', 'arg1', 'arg2'])
Si l'option check=True est présente, une exception sera levée en cas de retour non null de la commande invoquée:
import subprocess
try:
cpo = subprocess.run(['/usr/bin/false'], capture_output=True, encoding='utf8', check=True)
except subprocess.CalledProcessError:
print(r'execption capturée, on continue')
===== Suivi des sorties standard et erreur =====
Syntaxe à utiliser en version 3.5:
import subprocess
cpo = subprocess.run(['/patho/to/command', 'args'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# l'attribut cpo.stdout est de type bytes il faut le décoder
print(cpo.stdout.decode('utf8'))
La version 3.6 introduit les paramètres capture_output et encoding:
import subprocess
cpo = subprocess.run(['/usr/bin/false'], capture_output=True, encoding='utf8')
print(cpo.stdout)
===== Références =====
* https://www.askpython.com/python-modules/python-system-command
* https://docs.python.org/fr/3/library/subprocess.html