Question 1Que représente sys.path ?
sys et argparse — Infos runtime et analyse d'arguments
Apprends les modules sys et argparse de Python depuis la base. De la lecture des infos runtime avec sys.path / sys.argv / sys.exit à la construction d'analyseurs d'arguments structurés avec argparse — le tout en pratique.
Cet article parcourt le module sys, qui te donne accès au runtime Python, et le module argparse, qui structure les arguments en ligne de commande. Tu couvriras les bases de sys.path / sys.argv / sys.exit, puis tu passeras à la définition d'arguments avec conversion de type, valeurs par défaut et choix en utilisant ArgumentParser d'argparse.
Le module sys — lire le runtime Python
Le module sys est une bibliothèque standard qui te donne accès aux informations sur le processus Python en cours d'exécution lui-même. Ce qui peut être importé (sys.path), ce qui a été passé depuis la ligne de commande (sys.argv), la version de Python et la plateforme (sys.version / sys.platform), et comment terminer le processus (sys.exit) — les infos et fonctions sur Python lui-même vivent toutes ici.
| Attribut / Fonction | Type | Signification |
|---|---|---|
| sys.path | list[str] | Liste des dossiers où import cherche les modules |
| sys.argv | list[str] | Liste des arguments en ligne de commande passés |
| sys.version | str | Chaîne de version Python |
| sys.platform | str | Identifiant de l'OS ('darwin' / 'linux' / 'win32', etc.) |
| sys.exit(code) | fonction | Termine le processus avec le code de sortie donné |
| sys.stdout | TextIO | Sortie standard. Là où print écrit |
`sys.path` est la liste des dossiers que import parcourt pour trouver les modules, scannés dans l'ordre depuis le haut. Avec for p in sys.path: tu peux afficher chaque dossier enregistré une ligne à la fois. Dans le runtime Pyodide tu verras des chemins comme /lib/python312.zip / /lib/python3.12 / /lib/python3.12/lib-dynload / /lib/python3.12/site-packages, alors qu'une installation Python normale liste le dossier de la bibliothèque standard et site-packages (où vont les bibliothèques installées par pip).
sys.platform est un attribut qui retourne l'identifiant de l'OS sous forme de chaîne. Dans le runtime Pyodide du navigateur il affiche emscripten (sur une vraie machine tu verras darwin (Mac) / win32 (Windows) / linux). Il est utilisé quand tu as besoin de te brancher sur le système d'exploitation.
import sys
print("Platform:", sys.platform)
# Mac: Platform: darwin
# Windows: Platform: win32
# Linux: Platform: linux
# Navigateur: Platform: emscripten
sys.argv et argparse — gérer les arguments en ligne de commande
Sur une vraie installation Python, quand tu exécutes une commande comme python script.py user_name 42, les jetons atterrissent dans sys.argv sous forme de liste de chaînes. sys.argv[0] est le nom du script, et sys.argv[1:] contient les arguments que tu as passés. Le module argparse est une bibliothèque standard qui lit sys.argv et la convertit en un objet auquel tu accèdes par attribut, te laissant déclarer la conversion de type, les valeurs par défaut et les restrictions de choix de manière propre.
sys.argv. La première entrée est le nom du script, donc les vrais arguments commencent à sys.argv[1:].# script.py (destiné à tourner sur une vraie installation Python)
import sys
print(sys.argv)
# Exemple : exécuter python script.py user_name 42 produit
# ['script.py', 'user_name', '42']
# Les vrais arguments commencent à [1:]
args = sys.argv[1:]
print(args) # ['user_name', '42']
sys.argv est essentiellement vide dans le navigateur
Le runtime navigateur que cette série utilise n'a pas du tout de ligne de commande, donc sys.argv ne contient qu'une valeur fixe comme ['<exec>']. Vérifie le comportement en vraie machine dans le bloc code ci-dessus ; dans la pratique, tu remplaceras en passant une liste directement à la place de sys.argv.
Une fois que tu commences à démonter manuellement `sys.argv`, tu rencontres tout de suite des exigences comme convertir des chaînes en nombres, supporter des drapeaux optionnels, ou afficher un message d'usage avec --help. Python livre argparse comme bibliothèque standard pour gérer tout ça pour toi, et le flux de base se fait en trois étapes — créer un ArgumentParser, enregistrer les arguments que tu veux recevoir avec add_argument, puis les convertir en valeurs avec parse_args.
# Style Python en vraie machine
import argparse
parser = argparse.ArgumentParser(description="CLI de recherche de produits")
parser.add_argument("--keyword", required=True) # passer comme --keyword Apple
parser.add_argument("--limit", type=int, default=10) # auto-converti en int
args = parser.parse_args() # lit sys.argv[1:]
print(args.keyword, args.limit)
--keyword Apple --limit 5 en un objet accessible par attribut sous la forme args.keyword / args.limit.Dans le navigateur, utilise la forme parse_args(list)
Comme le runtime navigateur n'a pas de sys.argv, appeler parse_args() sans arguments lève une erreur. Utilise la même forme à passage de liste que tu utiliserais dans les tests — parse_args(["--keyword", "Apple", "--limit", "5"]). Sur une vraie machine, omettre cette liste utilise automatiquement sys.argv[1:].
argparse en profondeur — conversion de type, valeurs par défaut, choix
add_argument a plusieurs options qui contrôlent comment un argument se comporte. Quatre d'entre elles couvrent presque tous les cas pratiques de CLI.
| Option | Effet | Exemple |
|---|---|---|
| type | Convertir la chaîne reçue vers un autre type | type=int → '5' devient 5 |
| default | Valeur par défaut quand l'argument est omis | default=10 |
| required | Le rendre obligatoire ; erreur si manquant | required=True |
| choices | Restreindre à une liste de valeurs autorisées | choices=['asc', 'desc'] |
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--keyword", required=True)
parser.add_argument("--limit", type=int, default=10)
parser.add_argument("--order", choices=["asc", "desc"], default="asc")
args = parser.parse_args(["--keyword", "Apple", "--limit", "5", "--order", "desc"])
print(args.keyword, args.limit, args.order)
# -> Apple 5 desc
Combiner type et default
Quand tu spécifies les deux type=int, default=10, l'argument reçoit 10 (int) quand omis, et la valeur passée est convertie en int quand fournie. Les valeurs par défaut ne passent pas par la conversion de type, donc écris la valeur par défaut déjà dans le type cible. Écrire default="10" mettrait la chaîne "10" uniquement quand l'argument est omis — un bug subtil.
sys.exit — retourner un code de sortie
sys.exit(code) est une fonction qui prend un nombre et termine le processus. Par convention, 0 signifie succès et toute valeur non nulle (généralement 1) signifie échec, et les systèmes CI et les scripts shell se branchent sur cette valeur pour décider quoi faire ensuite. En interne, ça lève une exception SystemExit. Tu peux l'attraper avec try / except, mais tu la laisses généralement se propager pour que le processus se termine.
import sys
price = -100
if price < 0:
print("Erreur : le prix est négatif")
sys.exit(1) # rien après ce point ne tourne
print("On continue...") # ne tourne que quand price >= 0
sys.exit(0) signale le succès et sys.exit(1) signale l'échec à l'appelant (un shell ou un CI). Sur une vraie machine tu peux vérifier le code de sortie avec $? dans le shell. Si tu n'appelles pas sys.exit, le script s'exécute jusqu'à la dernière ligne.Vérification des connaissances
Répondez à chaque question une par une.
Question 2Quelle est la meilleure description de sys.exit(1) ?
Question 3Quand tu veux essayer argparse dans le navigateur, quelle approche peux-tu utiliser à la place de sys.argv ?