Résumé : Pour appeler une commande externe dans un script Python, utilisez l'une des méthodes suivantes :
subprocess.call()
fonctionsubprocess.run()
fonctionsubprocess.Popen
Classeos.system()
fonctionos.popen()
fonction
Que vous soyez développeur ou administrateur système, les scripts d'automatisation feront partie intégrante de votre routine quotidienne.
Il peut s'agir d'automatiser des tâches de routine telles que des sauvegardes de fichiers ou des vérifications de l'état. Cependant, la maintenance de tels scripts shell peut devenir fastidieuse et complexe. C'est là que les scripts Python sont utiles et ouvrent une toute nouvelle dimension pour gérer facilement de telles tâches. Mais pour que de tels scripts fonctionnent efficacement, nous devons apprendre à invoquer des commandes externes/shell dans nos scripts Python. Cela dit, passons à notre énoncé du problème.
Problème : Étant donné une commande externe pouvant s'exécuter sur votre système d'exploitation ; comment appeler la commande en utilisant un script Python ?
Exemple :Supposons que vous souhaitiez envoyer un ping à un serveur distant à l'aide du ping
de votre système d'exploitation. commande, le tout depuis votre programme Python.
Python propose différentes manières d'appeler et d'exécuter des commandes shell externes. Sans plus tarder, discutons des différentes méthodes qui peuvent être utilisées pour invoquer des commandes externes en Python et des scénarios idéaux pour les utiliser.
Méthode 1 :Utilisation de la fonction subprocess.call()
Le subprocess
module est la méthode recommandée pour invoquer et exécuter des commandes externes en Python. Il fournit un moyen flexible de supprimer l'entrée et la sortie de diverses commandes externes/shell et, une fois invoqué, il déclenche de nouveaux processus et obtient ensuite leurs codes de retour.
Vous pouvez utiliser diverses fonctions avec le module subprocess pour invoquer des commandes externes à l'aide d'un script Python.
Le call()
La fonction du module de sous-processus est utilisée pour démarrer un processus externe, attend que la commande se termine, puis fournit un code de retour. Ainsi le subprocess.call()
La fonction est utilisée pour renvoyer un code de sortie qui peut ensuite être utilisé dans le script pour déterminer si la commande s'est exécutée avec succès ou si elle a renvoyé une erreur. Tout code de retour autre que "0" signifie qu'il y a eu une erreur d'exécution.
Regardons le programme suivant utilisant le call()
fonction pour vérifier si le test ping est réussi dans le système :
import subprocess return_code = subprocess.call(['ping', 'localhost']) print("Output of call() : ", return_code)
Sortie :
Pinging DESKTOP-PC [::1] with 32 bytes of data: Reply from ::1: time<1ms Reply from ::1: time<1ms Reply from ::1: time<1ms Reply from ::1: time<1ms Ping statistics for::1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Output of call() : 0
Méthode 2 :Utilisation de la fonction subprocess.run()
Dans Python 3.5 et supérieur, le run()
function est la méthode recommandée pour invoquer le subprocess
module pour exécuter une commande externe.
Il est similaire au call()
fonction, cependant, contrairement au call()
fonction, il ne renvoie pas d'exception si le processus sous-jacent renvoie un code d'erreur. Le run()
fonction est plus flexible que le call()
fonction et au lieu de renvoyer un code de retour, elle renvoie un CompletedProcess
objet une fois que le code a terminé son exécution.
import subprocess return_code = subprocess.run(['ping', 'localhost']) print("Output of run() : ", return_code)
Sortie :
Pinging DESKTOP-PC [::1] with 32 bytes of data: Reply from ::1: time<1ms Reply from ::1: time<1ms Reply from ::1: time<1ms Reply from ::1: time<1ms Ping statistics for::1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Output of run() : CompletedProcess(args=['ping', 'localhost'], returncode=0)
Méthode 3 :Utilisation de la classe subprocess.Popen
L'utilisation de subprocess.Popen()
est recommandé uniquement pour les cas avancés qui ne peuvent pas être traités par d'autres méthodes comme subprocess.run()
ou subprocess.call()
. En effet, du fait de son caractère global, il est plus compliqué et difficile à gérer. Néanmoins, il peut s'avérer déterminant dans le traitement d'opérations complexes.
Examinons le code suivant qui utilise le Popen()
pour ouvrir Microsoft Excel sous Windows :
import subprocess subprocess.Popen("C:\Program Files (x86)\Microsoft Office\Office12\excel.exe")
Méthode 4 :Utilisation de la fonction os.system(command)
Le os
module en Python fournit plusieurs fonctions pour interagir directement avec le shell et le système. Jetons un coup d'œil à quelques méthodes pour invoquer des commandes externes en utilisant le os
module.
Le os.system()
La fonction aide à interagir immédiatement avec le shell en transmettant des commandes et des arguments au shell système. Il renvoie un code de sortie à la fin de la commande, ce qui signifie qu'un code de sortie de 0 indique une exécution réussie tandis que tout autre que 0 signifie que l'exécution a échoué. D'une part, c'est une approche pratique puisque le system()
la méthode peut être utilisée pour exécuter plusieurs commandes à la fois à l'aide de canaux et de la redirection d'entrée/sortie ; tandis que d'autre part, vous devez gérer manuellement les caractères d'échappement tels que les espaces.
Regardons le programme suivant qui est utilisé pour afficher la date actuelle du système en utilisant le os.system()
commande :
import os dt = 'date' os.system(dt)
Sortie :
The current date is: 03-09-2020
Vous pouvez l'essayer vous-même dans notre shell interactif en ligne :
Exercice :Exécutez le code. Pourquoi la sortie est-elle différente de la sortie sur votre propre machine ?
Méthode 5 :Utilisation de la fonction os.popen ("Commande")
Le os.popen()
se comportera comme os.system
Toutefois, au lieu de renvoyer le code de retour, elle renvoie un objet semblable à un fichier qui peut être utilisé pour accéder à l'entrée/sortie standard du processus en cours d'exécution. Le popen
La commande nous permet d'interagir avec le système et de créer un canal vers ou depuis une autre commande. Il a quatre variantes différentes qui sont :
- ouvrir
- popen2
- popen3
- popen4
Regardons le programme suivant qui utilise popen
pour imprimer une chaîne en sortie en appelant la commande shell, echo
:
import os print (os.popen("echo Hello FINXTER!").read())
Sortie :
Hello FINXTER!
Essayez vous-même :
Exercice :Est-ce que la commande echo doit être installée sur le serveur pour que cela fonctionne ?
Quelle méthode devez-vous utiliser ?
os.system()
:Si l'impression de la sortie sur la console n'est pas un critère et que vous n'avez besoin d'exécuter que quelques commandes simples, vous pouvez utiliser leos.system()
fonction.subprocess.run()
:Si vous voulez gérer l'entrée et la sortie d'une commande externe alors utilisez lesubprocess.run()
commande.subprocess.Popen
:Si vous souhaitez gérer une commande externe complexe et continuer votre travail, vous pouvez utiliser lesubprocess.Popen
classe.
Conclusion
Ainsi, de la discussion ci-dessus, nous pouvons conclure que les méthodes suivantes peuvent être utilisées pour appeler une commande externe en python :
subprocess.call()
fonctionsubprocess.run()
fonctionsubprocess.Popen
Classeos.system()
fonctionos.popen()
fonction
La documentation officielle de Python recommande d'utiliser le subprocess
module sur le os
le module fonctionne depuis le subprocess
module offre plusieurs avantages par rapport au os
module comme des options plus flexibles, une meilleure gestion des erreurs et bien plus encore.
J'espère que vous avez trouvé cet article utile et qu'il vous aide à comprendre comment invoquer des commandes externes en python. Restez à l'écoute pour des concepts plus intéressants à l'avenir.