Robustes Python-CLI-Skript mit Tests

Schreiben Sie ein produktionsreifes Python-Kommandozeilenskript: argparse, Logging, Fehlerbehandlung, Exit-Codes und pytest-Tests. Entwickelt für ChatGPT, Claude und Microsoft Copilot. Er enthält 6 anpassbare Variablen und lässt sich kostenlos mit einem Klick kopieren.

Fortgeschritten · Code · Redaktionelle Prüfung ausstehend

Prompt

Handle als erfahrener Python-Entwickler, der wartbare interne Werkzeuge schreibt.

Ich brauche ein Kommandozeilenskript namens `{{script_name}}`, das Folgendes tut: {{task}}.
Eingaben: {{inputs}}.
Erwartete Ausgaben: {{outputs}}.
Python-Version: {{python_version}}. Erlaubte Abhängigkeiten: {{dependencies}}.

Liefere in dieser Reihenfolge:
1. Schnittstellenentwurf: Unterbefehle (falls sinnvoll), Positionsargumente, Optionen mit Standardwerten und eine Beispielausgabe von `--help`.
2. Den vollständigen Code in einer einzigen Datei, mit:
   - `argparse`, `main(argv=None) -> int` und einem `if __name__ == "__main__"`-Block.
   - Konfigurierbarem `logging` über `--verbose` und `--quiet`, Meldungen auf stderr und Ergebnisse auf stdout.
   - Vollständigen Type Hints, `pathlib` für Pfade und kleinen reinen Funktionen, getrennt von der Ein-/Ausgabe.
   - Einem `--dry-run`-Schalter, falls das Skript Dateien oder externe Systeme verändert.
   - Dokumentierten Exit-Codes (0 Erfolg, 1 Bedienfehler, 2 Datenfehler usw.).
3. Fehlerbehandlung: welche Ausnahmen abgefangen werden, klare Meldungen für Nutzende und keine Tracebacks außer im Verbose-Modus.
4. `pytest`-Tests (mit `tmp_path` und `capsys`) für den Normalfall, ungültige Eingaben und Grenzfälle.
5. Anleitung zur Verwendung und wie man das Skript mit `pyproject.toml` als installierbaren Befehl paketiert.

Vorgaben:
- Befolge PEP 8 und verwende keine Abhängigkeiten außerhalb der erlaubten Liste.
- Nimm keine Datenformate an, die ich nicht beschrieben habe: Frage mich oder nutze [AUSFÜLLEN].

So verwenden Sie ihn

  1. Erklären Sie die Aufgabe mit einem echten Beispiel für Ein- und Ausgabe.
  2. Sagen Sie, ob Sie Abhängigkeiten installieren dürfen oder bei der Standardbibliothek bleiben müssen.
  3. Speichern Sie Skript und Tests und führen Sie pytest aus, bevor Sie echte Daten verarbeiten.
  4. Probieren Sie es immer zuerst mit --dry-run aus.

Anwendungsbeispiel

Skript: rechnungen-umbenennen · Aufgabe: Rechnungs-PDFs anhand von Datum und Lieferant aus einer CSV umbenennen · Nur Standardbibliothek.

Beispielergebnis

2. Code (Auszug aus rechnungen_umbenennen.py)

from __future__ import annotations

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

log = logging.getLogger("rechnungen-umbenennen")


def neuer_name(datum: str, lieferant: str) -> str:
    """Reine Funktion: '2025-03-14', 'Papier Sonne' -> '2025-03-14_papier-sonne.pdf'."""
    return f"{datum}_{'-'.join(lieferant.lower().split())}.pdf"


def csv_lesen(pfad: Path) -> dict[str, str]:
    with pfad.open(newline="", encoding="utf-8") as f:
        return {zeile["Datei"]: neuer_name(zeile["Datum"], zeile["Lieferant"]) for zeile in csv.DictReader(f)}


def main(argv: list[str] | None = None) -> int:
    p = argparse.ArgumentParser(prog="rechnungen-umbenennen", description="Benennt Rechnungs-PDFs anhand einer CSV um.")
    p.add_argument("ordner", type=Path)
    p.add_argument("csv", type=Path)
    p.add_argument("--dry-run", action="store_true", help="Änderungen nur anzeigen")
    stufe = p.add_mutually_exclusive_group()
    stufe.add_argument("-v", "--verbose", action="store_true")
    stufe.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:
        aenderungen = csv_lesen(args.csv)
    except (OSError, KeyError) as e:
        log.error("CSV kann nicht gelesen werden: %s", e)
        return 2
    for alt, neu in aenderungen.items():
        quelle, ziel = args.ordner / alt, args.ordner / neu
        if not quelle.exists() or ziel.exists():
            log.warning("Übersprungen: %s", alt)
            continue
        print(f"{alt} -> {neu}")
        if not args.dry_run:
            quelle.rename(ziel)
    return 0


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

Exit-Codes: 0 Erfolg, 1 Bedienfehler (argparse liefert standardmäßig 2: [AUSFÜLLEN], falls vereinheitlicht werden soll), 2 Datenfehler. Das Datumsformat in der CSV ist nicht beschrieben: [AUSFÜLLEN] …

Wichtige Fakten

Kategorie
Programmierung & Entwicklung · Python
Ausgabetyp
Code
Niveau
Fortgeschritten
Entwickelt für
ChatGPT, Claude und Microsoft Copilot
Verifiziert in
Redaktionelle Prüfung ausstehend
Variablen
Name des Skripts, Aufgabe, Eingaben, Ausgaben, Python-Version und Erlaubte Abhängigkeiten
Sprache
Deutsch
Preis
Kostenlos, ohne Anmeldung
Aktualisiert
07.11.2026

Häufig gestellte Fragen

Warum argparse statt Click oder Typer?

Argparse gehört zu Python und bringt keine Abhängigkeiten mit, was auf stark abgesicherten Servern hilft. Wenn Sie Pakete installieren dürfen, nennen Sie Typer oder Click als erlaubte Abhängigkeiten, dann passt sich der Prompt an.

Was bringt die Trennung von Logik und Ein-/Ausgabe?

Sie können die Logik mit schnellen Tests prüfen, die nie echte Dateien berühren, und sie in anderen Skripten oder einer API wiederverwenden.

Wofür ist dieser Prompt gedacht?

Schreiben Sie ein produktionsreifes Python-Kommandozeilenskript: argparse, Logging, Fehlerbehandlung, Exit-Codes und pytest-Tests.

Mit welchen KI-Tools funktioniert er?

Er ist für ChatGPT, Claude und Microsoft Copilot entwickelt. Wir haben ihn in diesen Tools noch nicht überprüft, daher können die Ergebnisse variieren.

Wie passe ich den Prompt an?

Klicken Sie auf „Anpassen“ und füllen Sie die Variablen aus (Name des Skripts, Aufgabe, Eingaben, Ausgaben, Python-Version und Erlaubte Abhängigkeiten). Der Text wird sofort aktualisiert und lässt sich anschließend mit einem Klick kopieren. Die Werte werden nur in Ihrem Browser gespeichert.

Brauche ich Erfahrung, um ihn zu verwenden?

Er ist für Fortgeschrittene: Es hilft, das Thema zu kennen, um guten Kontext zu liefern und das Ergebnis kritisch zu prüfen.

Ist dieser Prompt kostenlos?

Ja. Jeder Prompt von HomeCasa Prompts ist kostenlos, ohne Anmeldung und ohne Abonnement. Sie können ihn auch in beruflichen Projekten verwenden.

Kann ich der KI-Ausgabe vertrauen?

Betrachten Sie sie als hochwertigen Entwurf: Prüfen Sie Daten, Zahlen und wichtige Aussagen immer, bevor Sie etwas veröffentlichen oder Entscheidungen treffen.

Ähnliche Prompts