Découvrez le pouvoir de la bibliothèque `subprocess` en Python, un outil incontournable pour tout développeur Python qui se respecte. Que vous soyez un débutant cherchant à élargir vos compétences ou un professionnel expérimenté désireux de peaufiner votre maîtrise, notre guide approfondi sur la bibliothèque `subprocess` est là pour vous aider à naviguer avec confiance dans le monde de l'exécution de processus et de commandes externes en Python.
.run()
Commençons par dévoiler les secrets de la méthode .run(), comment utiliser efficacement avec ses arguments avec des exemples concrets pour vous aider à comprendre son fonctionnement. Apprenez à maîtriser la bibliothèque subprocess et à l'utiliser pour améliorer la flexibilité et la puissance de vos programmes Python.
La méthode .run() est l'une des principales méthodes que vous utiliserez avec la bibliothèque subprocess.
La méthode subprocess.run() est une méthode de haut niveau pour créer et gérer des processus. Elle offre une grande flexibilité et est recommandée pour les nouvelles applications qui n'ont pas besoin de la compatibilité descendante de l'ancienne API.
import subprocess #importer la bibliothèque
- subprocess.run(["ls", "-l"]) #executer le processus
Dans cet exemple, nous exécutons la commande ls -l qui liste les fichiers dans le répertoire courant en détail. Notez que la commande et ses arguments sont passés en tant que liste.
.run( ARGUMENTS )
Dans cette section, nous allons dévoiler les secrets des neuf arguments de la méthode subprocess.run() en Python. Chaque argument, de args à universal_newlines, sera détaillé pour vous aider à optimiser l'exécution de vos processus et commandes externes. Préparez-vous à découvrir comment ces arguments peuvent transformer votre code Python et booster votre productivité. C'est le moment de maîtriser subprocess.run() comme jamais auparavant.
Alors, commençons sans plus attendre !
args: spécifier la commande à exécuter et ses arguments
- subprocess.run(["ls", "-l"])
Nous exécutons la commande "ls" "-l" qui liste les fichiers dans le répertoire courant en détail.
- subprocess.run(["ls", "-l"])
Nous exécutons la commande "ls" "-l" qui liste les fichiers dans le répertoire courant en détail.
stdin, stdout, stderr: contrôler où l'entrée, la sortie et l'erreur du processus sont redirigées.
- result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE, encoding='utf-8', errors='ignore')
print(result.stdout) # afficher la sortie
Dans l'exemple, nous redirigeons la sortie de la commande ls -l vers un PIPE, ce qui nous permet de capturer cette sortie dans notre programme Python.
- result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE, encoding='utf-8', errors='ignore')
print(result.stdout) # afficher la sortie
Dans l'exemple, nous redirigeons la sortie de la commande ls -l vers un PIPE, ce qui nous permet de capturer cette sortie dans notre programme Python.
shell: executer la commande via le shell
- subprocess.run("ls -l", shell=True)
Si cet argument est True, la commande spécifiée sera exécutée via le shell. Dans l'exemple, nous exécutons la commande ls -l via le shell.
- subprocess.run("ls -l", shell=True)
Si cet argument est True, la commande spécifiée sera exécutée via le shell. Dans l'exemple, nous exécutons la commande ls -l via le shell.
cwd: spécifier le répertoire d'exécution de la commande
- subprocess.run("ls -l", cwd="/home/user")
Nous exécutons la commande ls -l dans le répertoire /home/user.
- subprocess.run("ls -l", cwd="/home/user")
Nous exécutons la commande ls -l dans le répertoire /home/user.
timeout: spécifier un délai d'avortement du processus s'il n'est pas terminé
- try:
subprocess.run("ls -l", timeout=1)
- except subprocess.TimeoutExpired:
print("Le processus a dépassé le délai imparti.")
Dans l'exemple, nous tuons la commande ls -l si elle ne se termine pas dans la seconde.
- try:
subprocess.run("ls -l", timeout=1)
- except subprocess.TimeoutExpired:
print("Le processus a dépassé le délai imparti.")
Dans l'exemple, nous tuons la commande ls -l si elle ne se termine pas dans la seconde.
check: renvoyer une exception en cas d'erreur
- try:
subprocess.run("ls -l", check=True)
- except subprocess.CalledProcessError:
print("La commande a échoué.")
Par exemple, subprocess.run("commande", check=True) lèvera une exception si la commande renvoie un code d'erreur.
- try:
subprocess.run("ls -l", check=True) - except subprocess.CalledProcessError:
print("La commande a échoué.")
Par exemple, subprocess.run("commande", check=True) lèvera une exception si la commande renvoie un code d'erreur.
encoding et errors: définir l'encodage et la gestion d'erreur
- result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE, encoding='utf-8', errors='ignore')
print(result.stdout)
Dans cet exemple, nous spécifions l'encodage 'utf-8' et l'option 'ignore' pour la gestion des erreurs lors de la lecture de la sortie de la commande. Cela garantit que la sortie est décodée correctement et que les erreurs sont gérées de manière appropriée.
- result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE, encoding='utf-8', errors='ignore')
print(result.stdout)
Dans cet exemple, nous spécifions l'encodage 'utf-8' et l'option 'ignore' pour la gestion des erreurs lors de la lecture de la sortie de la commande. Cela garantit que la sortie est décodée correctement et que les erreurs sont gérées de manière appropriée.
env: dictionnaire pour définir les variables d'environnement
- env = {"PATH": "/usr/local/bin"}
subprocess.run("ls -l", env=env)
Par exemple, nous définissons la variable env en utilisant un dictionnaire. Nous spécifions deux variables d'environnement : PATH avec la valeur /usr/local/bin et LANG avec la valeur en_US.UTF-8. Lorsque nous exécutons la commande avec subprocess.run(), le nouveau processus héritera de ces variables d'environnement définies.
- env = {"PATH": "/usr/local/bin"}
subprocess.run("ls -l", env=env)
Par exemple, nous définissons la variable env en utilisant un dictionnaire. Nous spécifions deux variables d'environnement : PATH avec la valeur /usr/local/bin et LANG avec la valeur en_US.UTF-8. Lorsque nous exécutons la commande avec subprocess.run(), le nouveau processus héritera de ces variables d'environnement définies.
universal_newlines: utiliser des nouvelles lignes universelles pour l'entrée et la sortie du processus
- result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE, universal_newlines=True)
print(result.stdout)
Cela facilite le traitement des données dans un format de texte universel. Par exemple, subprocess.run("commande", universal_newlines=True) utilise des nouvelles lignes universelles pour la commande et la sortie du processus.
- result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE, universal_newlines=True)
print(result.stdout)
Cela facilite le traitement des données dans un format de texte universel. Par exemple, subprocess.run("commande", universal_newlines=True) utilise des nouvelles lignes universelles pour la commande et la sortie du processus.
En somme, l'article nous a permis de découvrir la puissance de la méthode .run() de la bibliothèque subprocess en Python. Cette exploration nous a préparé à aborder notre prochain sujet : la méthode .Popen(), une autre fonctionnalité clé de subprocess qui offre encore plus de contrôle et de flexibilité. Restez à l'écoute pour plonger plus profondément dans le monde fascinant du scripting Python.
Révolutionnez votre Scripting avec Subprocess