Python >> Tutoriel Python >  >> Python Tag >> exec()

comment exécuter une commande bash dans un script python

La réponse de @milne fonctionne, mais subprocess.call() vous donne peu de commentaires.

Je préfère utiliser subprocess.check_output() afin que vous puissiez analyser ce qui a été imprimé sur stdout :

 import subprocess
 res = subprocess.check_output(["sudo", "apt", "update"])
 for line in res.splitlines():
     # process the output line by line

check_output génère une erreur à la sortie à zéro de la commande invoquée

Veuillez noter que cela n'invoque pas bash ou un autre shell si vous ne spécifiez pas le shell argument mot-clé de la fonction (idem pour subprocess.call() , et vous ne devriez pas le faire si ce n'est pas nécessaire car cela présente un risque pour la sécurité), il appelle directement la commande.

Si vous vous retrouvez à faire beaucoup d'invocations de commande (différentes) à partir de Python, vous voudrez peut-être regarder plumbum. Avec cela, vous pouvez rendre le (IMO) plus lisible :

from plumbum.cmd import sudo, apt, echo, cut

res = sudo[apt["update"]]()
chain = echo["hello"] | cut["-c", "2-"]
chain()

Il est possible d'utiliser le bash comme un programme, avec le paramètre -c pour exécuter les commandes :

Exemple :

bashCommand = "sudo apt update"
output = subprocess.check_output(['bash','-c', bashCommand])

Le module de sous-processus est conçu pour cela :

import subprocess
subprocess.call(["sudo", "apt", "update"])

Si vous souhaitez que le script se termine si la commande échoue, vous pouvez envisager d'utiliser check_call() au lieu d'analyser le code de retour vous-même :

subprocess.check_call(["sudo", "apt", "update"])