Mis a jour le 2017-12-03, 22:17

Lancement de process

status = subprocess.call(['ls', '-ls']) : appel système avec la liste des arguments, le stdout et le stderr du programme appelé sont redirigés vers celui du script python. Le statut de retour est fourni et l'appel est bloquant.
status = subprocess.call('ls -ls', shell = True) : exécute directement la ligne de commande (avec les risques de sécurité qui vont avec). L'appel est bloquant.
Redirection du stdout ou stderr du programme appelé :
subprocess.check_call('ls -lsX', shell = True) : lève une exception subprocess.CalledProcessError si erreur (et l'erreur contient le code de retour, la commande appelé et l'output éventuel). L'appel est bloquant également.
try:
    subprocess.check_call('ls -lsz', shell = True)
except subprocess.CalledProcessError as e:
    print e.returncode
    print e.cmd
    print e.output
  
out = subprocess.check_output('ls -ls', shell = True) : lève aussi une exception subprocess.CalledProcessError, mais renvoie l'output de la commande dans la variable (ici out). L'appel est bloquant.
Si on veut lancer une commande dont on veut récupérer le stdout et le stderr même si l'exécution s'est mal passée : popen = subprocess.Popen(myCommand, shell = True, stdin = None, stdout = subprocess.PIPE, stderr = subprocess.PIPE); (out, err) = popen.communicate() on peut alors avoir le code de sortie avec popen.returncode pour vérifier s'il est à 0 ou non.
Appel système général avec Popen, bloquant ou non-bloquant :

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert