logo oujood
🔍

Les arguments en ligne de commande en Python

Passer des arguments à un script Python depuis le terminal évite de modifier le code à chaque exécution. Ce cours couvre sys.argv et le module argparse.

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.

  📋 Copier le code

# 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.

  📋 Copier le code

# 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.

  📋 Copier le code

# 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=.

  📋 Copier le code

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.

  📋 Copier le code

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 :

  📋 Copier le code

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èresys.argvargparse
Nombre d'arguments1 ou 2 fixes3 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 codeMinimalPlus verbeux mais structuré

Par carabde | Mis à jour le 21 avril 2026