{{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