platform, sys et os : quelles différences pour obtenir les informations système en Python?

1. À propos des modules platform, sys et os en Python

Python possède plusieurs modules standards capables de fournir des informations sur l'environnement dans lequel un programme est exécuté. Parmi les plus importants figurent platform, sys et os. Ces trois modules peuvent sembler similaires lorsqu'il s'agit d'identifier le système, mais ils n'ont pas exactement le même rôle.

Le module platform est spécialisé dans l'identification de la plateforme : système d'exploitation, version du système, machine, architecture, processeur ou encore version et implémentation de Python. Le module sys fournit principalement des informations concernant l'interpréteur Python et son environnement d'exécution. Le module os fournit quant à lui une interface avec le système d'exploitation et permet notamment de travailler avec les fichiers, les dossiers, les variables d'environnement et différents services du système.

Ces trois modules appartiennent à la bibliothèque standard de Python. Aucune installation avec pip n'est donc nécessaire.

Sortie :

Pour comprendre immédiatement leur différence, nous pouvons afficher trois informations représentatives : platform.system(), sys.platform et os.name.

Sortie possible sous Windows :

Les trois résultats désignent ici le même environnement, mais ils utilisent des niveaux d'information et des conventions de nommage différents.

2. Comparer platform.system(), sys.platform et os.name

Les éléments platform.system(), sys.platform et os.name permettent tous d'obtenir une information liée à la plateforme, mais ils ne retournent pas les mêmes valeurs.

platform.system() retourne un nom relativement lisible du système d'exploitation. Il s'agit d'une fonction qui doit donc être appelée avec des parenthèses.

Sortie possible sous Windows :

sys.platform est un attribut du module sys. Il fournit un identifiant de plateforme utilisé par Python.

Sortie possible sous Windows :

Le nom win32 peut également être retourné lorsqu'un Python 64 bits fonctionne sous Windows 64 bits. Il ne faut donc pas utiliser cette valeur pour déterminer si Python fonctionne en 32 ou 64 bits.

os.name fournit une identification plus générale de la famille du système d'exploitation.

Sortie possible sous Windows :

La comparaison devient particulièrement claire lorsque nous observons les valeurs courantes sous les trois principaux systèmes.

Systèmeplatform.system()sys.platformos.name
WindowsWindowswin32nt
LinuxLinuxlinuxposix
macOSDarwindarwinposix

Cette comparaison montre que os.name ne permet pas, à lui seul, de distinguer Linux de macOS puisqu'ils appartiennent généralement tous les deux à la famille posix. Pour identifier précisément ces systèmes, platform.system() ou sys.platform sont plus adaptés.

3. Obtenir des informations détaillées avec le module platform

Le module platform est le plus spécialisé des trois lorsqu'il s'agit d'obtenir des informations descriptives sur le système. Il fournit plusieurs fonctions consacrées au système d'exploitation, à la machine et à l'environnement Python.

Le programme suivant utilise plusieurs fonctions importantes du module platform.

Sortie possible sous Windows :

La fonction platform.uname() permet également de regrouper plusieurs informations dans un même résultat.

Sortie possible :

Le module platform peut également fournir des informations concernant Python lui-même.

Sortie possible :

Le module platform constitue donc un excellent choix lorsqu'un programme doit produire une fiche descriptive du système ou un rapport de diagnostic.

4. Obtenir des informations sur Python avec le module sys

Le module sys est davantage orienté vers l'interpréteur Python et son environnement d'exécution. Il contient notamment la version de Python, l'identifiant de la plateforme, le chemin de l'interpréteur et différentes informations internes.

L'attribut sys.version fournit une chaîne détaillée décrivant la version de Python utilisée.

Sortie possible :

Pour effectuer des comparaisons de versions dans un programme, il est généralement préférable d'utiliser sys.version_info, qui fournit les composantes de la version sous une forme structurée.

Sortie possible :

L'attribut sys.platform permet d'identifier la plateforme sur laquelle Python est exécuté.

Sortie possible sous Linux :

Enfin, sys.executable permet d'obtenir le chemin de l'interpréteur Python utilisé pour exécuter le programme.

Sortie possible sous Windows :

Le module sys est donc particulièrement utile lorsqu'un programme doit connaître les caractéristiques de l'interpréteur Python plutôt que celles du système d'exploitation en général.

5. Obtenir des informations sur le système avec le module os

Le module os possède un objectif plus large : fournir une interface portable avec différentes fonctionnalités du système d'exploitation. Il permet notamment de manipuler des fichiers et des répertoires, d'accéder aux variables d'environnement et d'obtenir certaines informations relatives aux processus.

L'attribut os.name fournit le nom de la famille du système.

Sortie possible sous Windows :

Sous Linux et macOS, la valeur courante est généralement "posix".

Sortie possible sous Linux :

Le module os permet également de connaître le répertoire de travail courant avec os.getcwd().

Sortie possible :

La variable os.environ donne accès aux variables d'environnement. La méthode get() permet de récupérer une variable sans provoquer d'erreur lorsqu'elle n'existe pas.

Sortie possible :

Le module os peut également fournir l'identifiant du processus courant avec os.getpid().

Sortie possible :

Contrairement au module platform, os n'a donc pas pour objectif principal de produire une description détaillée de la plateforme. Il sert surtout à interagir avec le système d'exploitation.

6. Détecter Windows, Linux et macOS avec platform, sys et os

Les trois modules peuvent intervenir dans la détection du système, mais platform.system() et sys.platform permettent une distinction plus précise entre Windows, Linux et macOS que os.name.

Détection avec platform.system()

Avec platform.system(), Windows est identifié par "Windows", Linux par "Linux" et macOS par "Darwin".

Sortie possible sous Windows :

Détection avec sys.platform

Avec sys.platform, les identifiants courants sont "win32", "linux" et "darwin". La méthode startswith() peut notamment être utilisée pour Windows afin de rendre le test explicite.

Sortie possible sous Linux :

Détection avec os.name

Avec os.name, nous pouvons facilement distinguer Windows des systèmes de type POSIX. En revanche, la valeur "posix" ne permet pas à elle seule de savoir s'il s'agit de Linux ou de macOS.

Sortie possible sous macOS :

Pour une détection lisible de Windows, Linux et macOS, platform.system() constitue généralement le choix le plus simple.

7. Comprendre quand utiliser platform, sys ou os

Le choix entre platform, sys et os dépend principalement du type d'information recherché. Ces modules sont complémentaires plutôt que concurrents.

BesoinModule conseilléExemple
Nom lisible du systèmeplatformplatform.system()
Version du systèmeplatformplatform.release()
Machineplatformplatform.machine()
Processeurplatformplatform.processor()
Architecture de l'exécutableplatformplatform.architecture()
Identifiant de plateforme Pythonsyssys.platform
Version détaillée de Pythonsyssys.version_info
Chemin de l'interpréteur Pythonsyssys.executable
Famille du systèmeosos.name
Répertoire courantosos.getcwd()
Variables d'environnementosos.environ
Identifiant du processusosos.getpid()

Pour illustrer cette complémentarité, le programme suivant utilise chaque module pour ce qu'il décrit le mieux.

Sortie possible :

Nous pouvons donc retenir une règle pratique : platform décrit principalement la plateforme, sys décrit principalement l'environnement d'exécution Python et os fournit des services permettant d'interagir avec le système d'exploitation.

8. Combiner platform, sys et os dans un même programme

Dans une application de diagnostic, il peut être intéressant de combiner les trois modules afin d'obtenir une vue plus complète de l'environnement d'exécution.

Le programme suivant rassemble les principales informations dans un dictionnaire Python.

Sortie possible :

Cette approche permet de profiter des informations spécialisées de chaque module sans chercher à utiliser un seul module pour tous les besoins.

Nous pouvons également afficher directement les trois identifiants du système afin de voir leurs différences.

Sortie possible sous macOS :

Cet exemple montre clairement que ces trois informations ne sont pas interchangeables, même si elles concernent toutes la plateforme d'exécution.

9. Créer un script complet de diagnostic système

Nous pouvons maintenant créer un petit script de diagnostic système combinant platform, sys et os. Une première fonction collecte les informations et une seconde les affiche.

Sortie possible :

Nous pouvons compléter ce programme avec une fonction qui explique automatiquement la relation entre platform.system(), sys.platform et os.name.

Sortie possible sous Linux :

Cette organisation permet de créer un outil simple mais complet pour examiner à la fois le système d'exploitation, la plateforme Python et certains éléments de l'environnement du processus.

10. À retenir !

Les modules platform, sys et os fournissent tous des informations liées à l'environnement d'exécution, mais leurs objectifs sont différents et complémentaires.

  • platform.system() retourne un nom lisible du système, comme "Windows", "Linux" ou "Darwin".
  • sys.platform fournit un identifiant de plateforme utilisé par Python, comme "win32", "linux" ou "darwin".
  • os.name identifie une famille de systèmes, par exemple "nt" ou "posix".
  • Sous macOS, platform.system() retourne généralement "Darwin".
  • Sous Windows, sys.platform retourne couramment "win32", même avec un Python 64 bits.
  • os.name ne permet généralement pas de distinguer Linux de macOS, car les deux retournent "posix".
  • Le module platform est particulièrement adapté à la collecte d'informations descriptives sur le système, la machine et Python.
  • Le module sys est particulièrement adapté aux informations concernant l'interpréteur et l'environnement d'exécution Python.
  • Le module os sert principalement d'interface avec les services du système d'exploitation.
  • platform.machine() renseigne sur le type de machine rapporté par le système.
  • sys.version_info permet d'examiner proprement les composantes de la version de Python.
  • sys.executable fournit le chemin de l'interpréteur Python utilisé.
  • os.getcwd() retourne le répertoire de travail courant.
  • os.environ permet d'accéder aux variables d'environnement.
  • Pour un diagnostic complet, les trois modules peuvent être utilisés ensemble.

Le programme suivant résume les principales différences entre les trois modules.

Sortie possible sous Windows :

 




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 *