Le module sys en Python

@joekakone

Joseph Konka @joekakone

03/03/2026 · 10 min

Prenez le contrôle de l'interpréteur Python avec le module sys : gestion des arguments de ligne de commande (sys.argv), flux standards (stdin, stdout, stderr), chemins d'importation (sys.path) et arrêt de programme (sys.exit).

Le module sys en langage Python#

Alors que le module os gère les interactions avec le système d'exploitation physique, le module natif sys (System) s'intéresse à l'interpréteur Python lui-même.

Il permet d'inspecter l'environnement d'exécution (version de Python, plateforme matérielle), de manipuler les arguments passés au script en ligne de commande (sys.argv), d'interagir avec les flux d'entrées/sorties bas niveau (sys.stdout, sys.stderr) et de mesurer l'empreinte mémoire exacte des objets.


1. Arguments en ligne de commande : sys.argv#

Lorsque vous lancez un script Python depuis un terminal, vous pouvez lui transmettre des paramètres :

python mon_script.py input.csv 42 --verbose

Ces arguments sont immédiatement capturés par Python sous la forme d'une liste de chaînes de caractères nommée sys.argv : - sys.argv[0] contient toujours le nom du script lui-même ("mon_script.py"). - sys.argv[1] contient le premier argument ("input.csv"). - sys.argv[2] contient le deuxième argument ("42" — notez que c'est une chaîne, conversion requise avec int() !).

import sys

print(f"Nombre total d'arguments : {len(sys.argv)}")
for index, arg in enumerate(sys.argv):
    print(f"  sys.argv[{index}] = '{arg}'")

2. Quitter proprement un programme : sys.exit()#

La fonction sys.exit(code) interrompt immédiatement l'exécution de tout le programme en levant en interne l'exception SystemExit :

  • sys.exit(0) : signale au terminal une fin normale avec succès.
  • sys.exit(1) (ou tout code non nul) : signale une erreur critique.
import sys

def valider_fichier(nom_fichier: str):
    if not nom_fichier.endswith(".csv"):
        print("Erreur critique : Le fichier doit obligatoirement porter l'extension .csv !", file=sys.stderr)
        sys.exit(1)  # Quitte immédiatement le script avec code d'erreur

print("Traitement termine avec succes.")
sys.exit(0)

3. Informations sur l'interpréteur et la plateforme#

sys expose de nombreuses métadonnées sur le runtime :

import sys

# 1. Version de Python
print("Version complete :", sys.version)
print("Numero majeur    :", sys.version_info.major)  # ex: 3
print("Numero mineur    :", sys.version_info.minor)  # ex: 11

# 2. Chemin vers l'exécutable Python actif
print("Interpreteur     :", sys.executable)

# 3. Plateforme matérielle / OS
print("Plateforme       :", sys.platform)  # 'win32', 'linux', ou 'darwin' (macOS)

4. Les flux standards : stdin, stdout et stderr#

Python associe trois flux systèmes majeurs : - sys.stdin : flux d'entrée standard (utilisé sous le capot par input()). - sys.stdout : flux de sortie standard (utilisé sous le capot par print()). - sys.stderr : flux d'erreur dédié, dirigé vers la console sans mise en mémoire tampon.

import sys

# Écriture brute sur stdout sans saut de ligne automatique
sys.stdout.write("Impression directe sur stdout.\n")

# Écriture d'un message d'alerte sur le canal des erreurs (stderr)
sys.stderr.write("ATTENTION : Echec de connexion a la passerelle de paiement.\n")

5. Mesure de l'empreinte mémoire : sys.getsizeof()#

Pour analyser la consommation de RAM de vos structures de données, sys.getsizeof(objet) retourne la taille réelle en octets occupée par l'objet dans le Tas :

import sys

entier = 42
chaine = "AlgoJungle"
liste = [1, 2, 3, 4, 5]
dictionnaire = {"a": 1, "b": 2, "c": 3}

print(f"Taille int          : {sys.getsizeof(entier):>4} octets")
print(f"Taille str          : {sys.getsizeof(chaine):>4} octets")
print(f"Taille list (5 elts): {sys.getsizeof(liste):>4} octets")
print(f"Taille dict (3 cles): {sys.getsizeof(dictionnaire):>4} octets")

6. Mise en pratique : Création d'un utilitaire CLI avec validation#

Concevons un utilitaire en ligne de commande complet capable de traiter un fichier source avec contrôle des arguments :

import sys
import os

def afficher_usage():
    nom_prog = os.path.basename(sys.argv[0])
    print(f"Usage : python {nom_prog} <chemin_source> <multiplicateur>")
    print("Exemple : python app.py donnees.txt 2.5")

def main():
    # Vérification du nombre d'arguments attendus (exactement 2 arguments en plus du script)
    if len(sys.argv) != 3:
        print("Erreur : Nombre d'arguments invalide.", file=sys.stderr)
        afficher_usage()
        sys.exit(1)

    chemin_fichier = sys.argv[1]
    param_facteur = sys.argv[2]

    # Vérification de l'existence du fichier
    if not os.path.exists(chemin_fichier):
        print(f"Erreur : Le fichier source '{chemin_fichier}' n'existe pas.", file=sys.stderr)
        sys.exit(2)

    # Conversion du paramètre numérique
    try:
        facteur = float(param_facteur)
    except ValueError:
        print(f"Erreur : Le multiplicateur '{param_facteur}' n'est pas un nombre valide.", file=sys.stderr)
        sys.exit(3)

    print(f">>> Traitement valide : Fichier='{chemin_fichier}', Facteur={facteur}")
    sys.exit(0)

if __name__ == "__main__":
    main()

7. Défi d'application#

Écrivez un script additionneur_cli.py qui prend sur la ligne de commande une suite arbitraire de nombres (ex: python additionneur_cli.py 12 4.5 8 10), calcule leur somme et leur moyenne à l'aide de sys.argv[1:], et gère proprement le cas où aucun argument n'est fourni en affichant un code de retour d'erreur sys.exit(1).

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue