Script Python en ligne de commande robuste, avec tests

Écrivez un script Python en ligne de commande prêt pour la production : argparse, journalisation, gestion des erreurs, codes de sortie et tests pytest. Conçu pour ChatGPT, Claude et Microsoft Copilot. Il comprend 6 variables personnalisables et vous pouvez le copier gratuitement en un clic.

Intermédiaire · Code · En attente de relecture éditoriale

Prompt

Agis comme un développeur Python senior qui écrit des outils internes maintenables.

J'ai besoin d'un script en ligne de commande nommé `{{script_name}}` qui fait ceci : {{task}}.
Entrées : {{inputs}}.
Sorties attendues : {{outputs}}.
Version de Python : {{python_version}}. Dépendances autorisées : {{dependencies}}.

Livre, dans cet ordre :
1. La conception de l'interface : sous-commandes (si pertinent), arguments positionnels, options avec valeurs par défaut et un exemple de sortie `--help`.
2. Le code complet dans un seul fichier, avec :
   - `argparse`, `main(argv=None) -> int` et une garde `if __name__ == "__main__"`.
   - Une journalisation `logging` configurable via `--verbose` et `--quiet`, messages sur stderr et résultats sur stdout.
   - Des annotations de type complètes, `pathlib` pour les chemins, et de petites fonctions pures séparées des entrées/sorties.
   - Une option `--dry-run` si le script modifie des fichiers ou des systèmes externes.
   - Des codes de sortie documentés (0 succès, 1 erreur d'usage, 2 erreur de données, etc.).
3. La gestion des erreurs : quelles exceptions sont interceptées, des messages clairs pour l'utilisateur, et aucune trace d'appel sauf en mode verbeux.
4. Des tests `pytest` (avec `tmp_path` et `capsys`) pour le cas nominal, les entrées invalides et les cas limites.
5. Le mode d'emploi et la façon de le packager avec `pyproject.toml` pour en faire une commande installable.

Contraintes :
- Respecte la PEP 8 et n'utilise aucune dépendance en dehors de la liste autorisée.
- Ne suppose pas de formats de données que je n'ai pas décrits : pose-moi la question ou utilise [À COMPLÉTER].

Comment l'utiliser

  1. Expliquez la tâche avec un exemple réel d’entrée et de sortie.
  2. Précisez si vous pouvez installer des dépendances ou si vous devez vous limiter à la bibliothèque standard.
  3. Enregistrez le script et les tests, puis lancez pytest avant de l’utiliser sur de vraies données.
  4. Essayez toujours d’abord avec --dry-run.

Exemple d'utilisation

Script : renommer-factures · Tâche : renommer des factures PDF avec la date et le fournisseur indiqués dans un CSV · Bibliothèque standard uniquement.

Exemple de résultat

2. Code (extrait de renommer_factures.py)

from __future__ import annotations

import argparse
import csv
import logging
import sys
from pathlib import Path

log = logging.getLogger("renommer-factures")


def nouveau_nom(date: str, fournisseur: str) -> str:
    """Fonction pure : '2025-03-14', 'Papeterie Soleil' -> '2025-03-14_papeterie-soleil.pdf'."""
    return f"{date}_{'-'.join(fournisseur.lower().split())}.pdf"


def lire_csv(chemin: Path) -> dict[str, str]:
    with chemin.open(newline="", encoding="utf-8") as f:
        return {ligne["fichier"]: nouveau_nom(ligne["date"], ligne["fournisseur"]) for ligne in csv.DictReader(f)}


def main(argv: list[str] | None = None) -> int:
    p = argparse.ArgumentParser(prog="renommer-factures", description="Renomme des factures PDF d'après un CSV.")
    p.add_argument("dossier", type=Path)
    p.add_argument("csv", type=Path)
    p.add_argument("--dry-run", action="store_true", help="affiche les changements sans les appliquer")
    niveau = p.add_mutually_exclusive_group()
    niveau.add_argument("-v", "--verbose", action="store_true")
    niveau.add_argument("-q", "--quiet", action="store_true")
    args = p.parse_args(argv)
    logging.basicConfig(level=logging.DEBUG if args.verbose else logging.ERROR if args.quiet else logging.INFO)

    try:
        changements = lire_csv(args.csv)
    except (OSError, KeyError) as e:
        log.error("Impossible de lire le CSV : %s", e)
        return 2
    for ancien, nouveau in changements.items():
        source, cible = args.dossier / ancien, args.dossier / nouveau
        if not source.exists() or cible.exists():
            log.warning("Ignoré : %s", ancien)
            continue
        print(f"{ancien} -> {nouveau}")
        if not args.dry_run:
            source.rename(cible)
    return 0


if __name__ == "__main__":
    sys.exit(main())

Codes de sortie : 0 succès, 1 erreur d'utilisation (argparse renvoie 2 par défaut : [À COMPLÉTER] pour unifier), 2 erreur de données. Le format de date du CSV n'est pas précisé : [À COMPLÉTER]…

Informations clés

Catégorie
Programmation et développement · Python
Type de résultat
Code
Niveau
Intermédiaire
Conçu pour
ChatGPT, Claude et Microsoft Copilot
Vérifié sur
En attente de vérification éditoriale
Variables
Nom du script, Tâche, Entrées, Sorties, Version de Python et Dépendances autorisées
Langue
Français
Prix
Gratuit, sans inscription
Mis à jour
07/11/2026

Questions fréquentes

Pourquoi argparse plutôt que Click ou Typer ?

Argparse est fourni avec Python et n’ajoute aucune dépendance, ce qui aide sur les serveurs verrouillés. Si vous pouvez installer des paquets, indiquez Typer ou Click parmi les dépendances autorisées et le prompt s’adaptera.

Que gagne-t-on à séparer la logique des entrées/sorties ?

Vous pouvez tester la logique avec des tests rapides qui ne touchent jamais de vrais fichiers, et la réutiliser depuis d’autres scripts ou une API.

À quoi sert ce prompt ?

Écrivez un script Python en ligne de commande prêt pour la production : argparse, journalisation, gestion des erreurs, codes de sortie et tests pytest.

Avec quels outils d'IA fonctionne-t-il ?

Il est conçu pour ChatGPT, Claude et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.

Comment personnaliser le prompt ?

Cliquez sur « Personnaliser » et remplissez les variables (Nom du script, Tâche, Entrées, Sorties, Version de Python et Dépendances autorisées). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.

Faut-il de l'expérience pour l'utiliser ?

Il est de niveau intermédiaire : il vaut mieux connaître le sujet pour fournir un bon contexte et relire le résultat d'un œil critique.

Ce prompt est-il gratuit ?

Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.

Puis-je me fier au résultat de l'IA ?

Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.

Prompts similaires