Comment exécuter des scripts Bash dans Python
- Méthode 1 : Utilisation du module subprocess
- Méthode 2 : Utilisation de os.system
- Méthode 3 : Utilisation de subprocess.Popen
- Conclusion
- FAQ

L’exécution de scripts Bash à partir de Python peut considérablement améliorer vos capacités d’automatisation et rationaliser vos flux de travail. Que vous soyez un développeur cherchant à intégrer des commandes système dans vos applications ou un scientifique des données souhaitant tirer parti des capacités de shell, comprendre comment exécuter des scripts Bash en utilisant Python est essentiel. Dans cet article, nous allons explorer diverses méthodes pour exécuter des scripts Bash via Python, y compris l’utilisation du module subprocess, os.system, et plus encore. À la fin de ce guide, vous aurez une compréhension solide de la manière d’exécuter sans problème des commandes et des scripts Bash dans vos projets Python, vous permettant d’exploiter la pleine puissance des deux langages.
Méthode 1 : Utilisation du module subprocess
Le module subprocess
est un outil puissant en Python qui vous permet de lancer de nouveaux processus, de vous connecter à leurs pipes d’entrée/sortie/erreur et d’obtenir leurs codes de retour. Cette méthode est préférée pour exécuter des scripts Bash car elle offre plus de contrôle et de flexibilité que d’autres méthodes.
Voici un exemple simple de comment utiliser le module subprocess
pour exécuter un script Bash :
import subprocess
# Define the command to execute
command = ["bash", "your_script.sh"]
# Execute the command
process = subprocess.run(command, capture_output=True, text=True)
# Print the output and error (if any)
print("Output:")
print(process.stdout)
print("Error:")
print(process.stderr)
Sortie :
example of output
La fonction subprocess.run
exécute la commande spécifiée et attend qu’elle se termine. L’argument capture_output=True
vous permet de capturer les sorties et les messages d’erreur, qui sont ensuite accessibles via les attributs stdout
et stderr
de l’objet de processus retourné. Cette méthode est avantageuse car elle vous permet de gérer les erreurs avec grâce en examinant la sortie stderr
. De plus, utiliser des listes pour définir des commandes aide à éviter les vulnérabilités d’injection shell.
Méthode 2 : Utilisation de os.system
La fonction os.system
est une autre façon simple d’exécuter des scripts Bash à partir de Python. Bien qu’elle soit plus simple à utiliser que subprocess
, elle est moins flexible et ne fournit pas un accès direct à la sortie ou aux messages d’erreur.
Voici comment vous pouvez utiliser os.system
pour exécuter un script Bash :
import os
# Define the command to execute
command = "bash your_script.sh"
# Execute the command
exit_code = os.system(command)
# Print the exit code
print("Exit Code:", exit_code)
Sortie :
example of output
La fonction os.system
exécute la commande dans un sous-shell. Elle retourne le code de sortie de la commande, que vous pouvez utiliser pour déterminer si le script s’est exécuté avec succès. Cependant, une limitation de cette méthode est que vous ne pouvez pas capturer directement la sortie du script exécuté, ce qui peut être un inconvénient pour des tâches plus complexes. Si vous devez traiter la sortie ou les erreurs, envisagez d’utiliser subprocess
à la place.
Méthode 3 : Utilisation de subprocess.Popen
Pour des cas d’utilisation plus avancés, la classe subprocess.Popen
offre encore plus de contrôle sur l’exécution des scripts Bash. Cette méthode vous permet d’interagir avec le processus pendant qu’il s’exécute, ce qui la rend adaptée aux scripts de longue durée ou à ceux qui nécessitent une entrée en temps réel.
Voici un exemple d’exécution d’un script Bash en utilisant subprocess.Popen
:
import subprocess
# Define the command to execute
command = ["bash", "your_script.sh"]
# Open the process
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
# Read output and error
stdout, stderr = process.communicate()
# Print the output and error
print("Output:")
print(stdout)
print("Error:")
print(stderr)
Sortie :
example of output
Dans cette méthode, subprocess.Popen
démarre le processus et vous permet d’interagir avec lui en utilisant des pipes. La méthode communicate()
lit les sorties et les messages d’erreur après que le processus a été complété. Cette approche est particulièrement utile pour les scripts de longue durée, car elle vous permet de gérer la sortie en temps réel. De plus, vous pouvez fournir une entrée au script si nécessaire, ce qui rend cette méthode très polyvalente.
Conclusion
En conclusion, exécuter des scripts Bash en utilisant Python peut considérablement améliorer vos capacités de programmation, permettant une plus grande automatisation et efficacité. Les trois méthodes discutées—utilisation du module subprocess
, os.system
, et subprocess.Popen
—ont chacune leurs avantages et cas d’utilisation uniques. En fonction de vos besoins, vous pouvez choisir la méthode la plus appropriée pour votre projet. En maîtrisant ces techniques, vous pouvez intégrer sans problème des scripts Bash dans vos applications Python, ouvrant de nouvelles possibilités pour l’automatisation et la gestion système.
FAQ
-
Quelle est la meilleure méthode pour exécuter un script Bash à partir de Python ?
La meilleure méthode dépend de vos besoins spécifiques. Dans la plupart des cas, il est recommandé d’utiliser le modulesubprocess
en raison de sa flexibilité et de ses capacités de gestion des erreurs. -
Puis-je capturer la sortie d’un script Bash en Python ?
Oui, vous pouvez capturer la sortie en utilisant le modulesubprocess
en définissantcapture_output=True
ou en utilisantsubprocess.PIPE
avecPopen
. -
Est-il sûr d’exécuter des scripts Bash à partir de Python ?
Oui, mais soyez prudent quant aux vulnérabilités d’injection shell. Lors de l’utilisation desubprocess
, il est plus sûr de passer des commandes sous forme de liste plutôt que sous forme de chaîne unique. -
Puis-je passer des arguments à mon script Bash depuis Python ?
Oui, vous pouvez passer des arguments en les incluant dans la liste de commandes lors de l’utilisation desubprocess
ouos.system
. -
Que se passe-t-il si mon script Bash nécessite une entrée utilisateur ?
Vous pouvez utilisersubprocess.Popen
pour interagir avec le processus et fournir une entrée au besoin.