OUJOOD.COM
Quand vous exécutez un script Python, vous pouvez lui passer des informations directement depuis le terminal, sans modifier le code source. Par exemple : le nom d'un fichier à traiter, un nombre de répétitions, un mode de fonctionnement. C'est plus pratique que de coder ces valeurs en dur dans le script à chaque utilisation.
Python propose deux approches : sys.argv pour accéder directement aux arguments bruts — simple mais limité — et le module argparse pour construire des interfaces en ligne de commande complètes, avec validation, aide automatique et arguments optionnels.
sys.argv : les arguments bruts
sys.argv est une liste qui contient le nom du script suivi de tous les arguments passés dans le terminal. sys.argv[0] est toujours le nom du fichier Python, sys.argv[1] est le premier argument, et ainsi de suite.
# Fichier : saluer.py import sys print("Nom du script :", sys.argv[0]) print("Nombre d'arguments :", len(sys.argv) - 1) print("Arguments :", sys.argv[1:]) # Exécution dans le terminal : # python saluer.py Alice Bob # Résultat : # Nom du script : saluer.py # Nombre d'arguments : 2 # Arguments : ['Alice', 'Bob']
Utiliser sys.argv avec validation basique
Les arguments de sys.argv sont toujours des chaînes de caractères. Pensez à les convertir si vous attendez des nombres, et vérifiez qu'ils sont présents avant d'y accéder.
# Fichier : calculer.py import sys if len(sys.argv) != 3: print("Usage : python calculer.py <nombre1> <nombre2>") sys.exit(1) try: a = float(sys.argv[1]) b = float(sys.argv[2]) except ValueError: print("Erreur : les deux arguments doivent être des nombres.") sys.exit(1) print(f"{a} + {b} = {a + b}") print(f"{a} × {b} = {a * b}") # Exécution : python calculer.py 5 3 # Résultat : # 5.0 + 3.0 = 8.0 # 5.0 × 3.0 = 15.0
sys.exit(1) arrête le script avec un code d'erreur — la convention Unix : 0 signifie succès, tout autre valeur signifie erreur.
argparse : le module pour les scripts sérieux
argparse gère automatiquement la validation des arguments, les valeurs par défaut, les arguments optionnels, et génère une aide (--help) sans que vous ayez à l'écrire. C'est le module à utiliser dès que votre script a plus d'un ou deux arguments.
# Fichier : saluer.py import argparse # Créer le parser avec une description parser = argparse.ArgumentParser(description="Saluer une personne.") # Argument positionnel obligatoire parser.add_argument("nom", help="Prénom de la personne à saluer") # Parser les arguments args = parser.parse_args() print(f"Bonjour, {args.nom} !") # Exécution : python saluer.py Alice # Résultat : Bonjour, Alice ! # Aide automatique : python saluer.py --help # usage: saluer.py [-h] nom # Saluer une personne. # positional arguments: # nom Prénom de la personne à saluer
Arguments optionnels et valeurs par défaut
Les arguments qui commencent par -- sont optionnels. Si l'utilisateur ne les passe pas, argparse utilise la valeur définie dans default=.
import argparse parser = argparse.ArgumentParser(description="Générer un rapport.") # Argument positionnel (obligatoire) parser.add_argument("fichier", help="Fichier CSV à traiter") # Argument optionnel avec valeur par défaut parser.add_argument( "--format", choices=["txt", "json", "csv"], default="txt", help="Format de sortie (défaut : txt)" ) # Argument entier optionnel parser.add_argument( "--lignes", type=int, default=10, help="Nombre de lignes à afficher (défaut : 10)" ) args = parser.parse_args() print(f"Fichier : {args.fichier}") print(f"Format : {args.format}") print(f"Lignes : {args.lignes}") # Exécution : python rapport.py donnees.csv --format json --lignes 5 # Résultat : # Fichier : donnees.csv # Format : json # Lignes : 5
Argument booléen (flag)
Pour un argument qui active ou désactive une option sans valeur associée, utilisez action="store_true". Il vaut False par défaut et passe à True quand on le passe dans le terminal.
import argparse
parser = argparse.ArgumentParser(description="Traiter un fichier.")
parser.add_argument("fichier", help="Fichier à traiter")
parser.add_argument(
"--verbose",
action="store_true",
help="Afficher les détails du traitement"
)
args = parser.parse_args()
if args.verbose:
print(f"[INFO] Traitement de : {args.fichier}")
print("[INFO] Lecture en cours...")
print("Traitement terminé.")
# Sans --verbose : affiche juste "Traitement terminé."
# Avec --verbose : affiche les messages [INFO] en plus
Exemple complet : script de traitement de fichier
Un exemple réaliste qui combine argument obligatoire, options et flag :
import argparse
from pathlib import Path
parser = argparse.ArgumentParser(
description="Compter les lignes d'un fichier texte."
)
parser.add_argument("fichier", help="Chemin vers le fichier texte")
parser.add_argument(
"--encodage",
default="utf-8",
help="Encodage du fichier (défaut : utf-8)"
)
parser.add_argument(
"--vides",
action="store_true",
help="Inclure les lignes vides dans le compte"
)
args = parser.parse_args()
chemin = Path(args.fichier)
if not chemin.exists():
print(f"Erreur : fichier '{args.fichier}' introuvable.")
raise SystemExit(1)
lignes = chemin.read_text(encoding=args.encodage).splitlines()
if not args.vides:
lignes = [l for l in lignes if l.strip()]
print(f"Nombre de lignes : {len(lignes)}")
# Exécution :
# python compter.py notes.txt
# python compter.py notes.txt --vides
# python compter.py notes.txt --encodage latin-1 --vides
sys.argv ou argparse : comment choisir ?
| Critère | sys.argv | argparse |
|---|---|---|
| Nombre d'arguments | 1 ou 2 fixes | 3 et plus, ou optionnels |
| Aide automatique (--help) | ❌ À écrire manuellement | ✅ Générée automatiquement |
| Validation des types | ❌ À faire manuellement | ✅ Via type=int, float… |
| Valeurs par défaut | ❌ À gérer manuellement | ✅ Via default= |
| Complexité du code | Minimal | Plus verbeux mais structuré |
Par carabde | Mis à jour le 21 avril 2026