Outils pour utilisateurs

Outils du site


dev:python:executer_commande_systeme

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

dev/python/executer_commande_systeme.txt · Dernière modification : 2021/02/01 21:51 de 127.0.0.1