Exécuter des commandes système avec os.system() en Python

1. À propos de os.system()

Le module os de Python fournit différentes fonctions permettant d'interagir avec le système d'exploitation. Parmi elles, la fonction os.system() permet d'exécuter une commande système depuis un programme Python.

Une commande passée à os.system() est transmise à l'interpréteur de commandes du système. Il est ainsi possible d'exécuter depuis Python certaines commandes que nous pourrions normalement saisir dans CMD, PowerShell ou un terminal Linux/macOS.

Pour utiliser os.system(), nous devons commencer par importer le module os. Le programme suivant charge ce module puis affiche un message.

Sortie :

2. Syntaxe et fonctionnement de os.system()

La fonction os.system() reçoit comme argument une chaîne de caractères contenant la commande système à exécuter. Sa syntaxe générale est la suivante.

Sortie :

Par exemple, la commande echo permet d'afficher du texte dans le terminal. Nous pouvons l'exécuter directement depuis Python.

Sortie :

La commande est exécutée par le système d'exploitation et sa sortie apparaît normalement directement dans le terminal.

3. Exécuter une commande système simple

La fonction os.system() peut exécuter les commandes disponibles sur le système. Certaines commandes existent sur plusieurs systèmes d'exploitation, tandis que d'autres sont spécifiques à Windows, Linux ou macOS.

La commande echo constitue un exemple simple puisqu'elle permet d'afficher un message depuis l'interpréteur de commandes.

Sortie :

Nous pouvons également demander au système d'afficher sa version. Sous Windows, la commande ver fournit cette information.

Sortie possible sous Windows :

4. Exécuter des commandes sous Windows

Sous Windows, os.system() peut exécuter les commandes reconnues par l'interpréteur de commandes. La commande dir permet par exemple d'afficher le contenu du dossier courant.

Sortie possible :

Une autre commande Windows courante est cls, qui permet d'effacer le contenu affiché dans le terminal.

Sortie :

Il est également possible de créer un dossier avec la commande système mkdir. Dans l'exemple suivant, nous créons un dossier nommé python.

Sortie :

5. Exécuter des commandes sous Linux et macOS

Sous Linux et macOS, nous pouvons également utiliser os.system() pour exécuter les commandes disponibles dans le shell. La commande ls permet par exemple d'afficher le contenu du dossier courant.

Sortie possible :

La commande pwd permet d'afficher le chemin du répertoire courant sous Linux et macOS.

Sortie possible :

Pour effacer le terminal sous Linux ou macOS, nous pouvons utiliser la commande clear.

Sortie :

6. Récupérer le code de retour d'une commande

La fonction os.system() renvoie une valeur permettant d'obtenir des informations sur la fin de l'exécution de la commande. Cette valeur est un code de retour fourni par le système.

Le programme suivant stocke la valeur renvoyée par os.system() dans la variable code.

Sortie courante lorsque la commande réussit :

Un résultat correspondant à une exécution réussie est généralement associé à un statut de sortie égal à 0. Cependant, la valeur exacte renvoyée directement par os.system() et son interprétation peuvent dépendre du système d'exploitation.

7. Construire une commande avec des variables Python

Une commande système peut être construite à partir de variables Python. Cela permet de modifier dynamiquement la commande exécutée par os.system().

Dans l'exemple suivant, le nom du dossier est stocké dans une variable Python puis utilisé pour construire une commande mkdir.

Sortie :

Cette construction est pratique lorsque les paramètres de la commande sont produits par le programme lui-même. En revanche, une donnée provenant directement d'un utilisateur ne doit pas être insérée sans contrôle dans une commande os.system(), car elle pourrait modifier la commande exécutée.

8. Exécuter plusieurs commandes système

Un programme Python peut appeler os.system() plusieurs fois afin d'exécuter successivement plusieurs commandes système.

Le programme suivant crée un dossier puis affiche le contenu du répertoire courant sous Windows.

Sortie possible sous Windows :

Nous pouvons également stocker plusieurs commandes dans une liste puis les exécuter successivement avec une boucle for.

Sortie :

9. Précautions et limites de os.system()

La fonction os.system() est simple à utiliser, mais elle doit être employée avec précaution. Une commande système peut créer, modifier ou supprimer des fichiers et effectuer d'autres opérations importantes sur l'ordinateur.

Il faut surtout éviter de construire directement une commande à partir d'une saisie utilisateur non contrôlée. L'exemple suivant illustre une pratique à éviter lorsque la valeur provient d'un utilisateur non fiable.

Sortie possible :

Le problème vient du fait que le texte saisi est transmis à l'interpréteur de commandes. Une saisie spécialement construite pourrait alors provoquer l'exécution d'une commande différente de celle prévue.

Pour les programmes modernes nécessitant l'exécution de commandes externes, le module subprocess est généralement préférable. Il offre davantage de contrôle sur les arguments, les sorties et les erreurs et permet notamment d'éviter l'utilisation du shell dans de nombreux cas.

Par exemple, pour exécuter une commande avec des arguments séparés, nous pouvons utiliser subprocess.run(). Ici, les éléments de la commande sont fournis sous forme de liste.

Sortie possible :

La version exacte affichée dépend naturellement de la version de Python installée sur l'ordinateur.

10. A retenir !

La fonction os.system() permet d'exécuter simplement une commande système depuis un programme Python.

  • os.system("commande") transmet une commande à l'interpréteur de commandes du système.
  • La sortie de la commande apparaît généralement directement dans le terminal.
  • dir permet d'afficher le contenu d'un dossier sous Windows.
  • ls permet d'afficher le contenu d'un dossier sous Linux et macOS.
  • cls efface le terminal sous Windows.
  • clear efface le terminal sous Linux et macOS.
  • os.system() renvoie une valeur liée au statut de fin de la commande.
  • Une commande peut être construite à partir de variables Python lorsque les données utilisées sont maîtrisées.
  • Il faut éviter d'insérer directement une saisie utilisateur non fiable dans une commande système.
  • Pour des besoins plus avancés, subprocess.run() est généralement préférable à os.system().

Le programme suivant montre un exemple simple qui choisit automatiquement une commande selon le système d'exploitation grâce à os.name.

Sortie possible :

 


 


Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


Leave a Reply

Your email address will not be published. Required fields are marked *