Rozdział 23 · Część III · Tworzymy projekt Python-

Drużyna łańcuch znaków SafeSort

argparse analizuje pięć podinstrukcji SafeSort i przypisuje każdej osobnej funkcji obsługi.

SafeSort · Część 3 z 6Projekt
src/safesort/
__init__.py
cli.pyNOWE
Pierwszy plik z prawdziwą logiką: cli.py.

SafeSort będzie sterowany pięcioma podkomendami: scan, plan, apply, duplicates oraz undo. Do analizy Moduł odpowiedzi na argumenty wiersza poleceń argparse z standardowej biblioteki — to on generuje tekst --help.

src/safesort/cli.py
def build_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(
        prog="safesort",
        description=(
            "SafeSort: a safe, non-destructive file organizer. "
            "scan/plan/duplicates are read-only; 'apply' sorts and 'undo' restores files."
        ),
    )
    subparsers = parser.add_subparsers(dest="command", required=True)

    scan_parser = subparsers.add_parser("scan", help="...")
    scan_parser.add_argument("root", type=Path, help="Directory to scan.")
    # ... Podobnie dla plan, apply, duplicates, undo
    return parser
add_subparsers(dest="command", required=True)
dest="command" umieszcza nazwę wywołanego podpokarmu w args.command. required=True wymusza argparse samodzielne wygenerowanie wyraźnego błędu, jeśli użytkownik uruchomi safesort bez żadnego podpolecenia nie musisz pisać tego czeku ręcznie.

Od rozdzielonych argumentów do wyniku

Każda podinstrukcja odpowiada jednej funkcji obsługi, a słownik wiąże nazwę Polecenia o pożądanej funkcji:

src/safesort/cli.py
_HANDLERS = {
    "scan": cmd_scan,
    "plan": cmd_plan,
    "apply": cmd_apply,
    "duplicates": cmd_duplicates,
    "undo": cmd_undo,
}

def main(argv: list[str] | None = None) -> int:
    parser = build_parser()
    args = parser.parse_args(argv)
    handler = _HANDLERS[args.command]
    return handler(args)

Taki słownik — ten sam trik co w grze „Kamień, papier, nożyczki” z załącznika do tej części: zamiast łańcucha if args.command == "scan": ... elif ... potrzebną funkcję po prostu wyszukuje się po kluczu.

Każda funkcja obsługi zwraca liczbę całkowitą: 0 at niezerowa wartość błędu to kod zwrotny programu, który widzi system operacyjny i każdy skrypt, który wywołuje safesort z innego miejsca.

Zainstaluj pakiet i uruchom polecenie — argparse generuje tekst pomocy sam, bez pojedynczego wiersza napisanego ręcznie:

~/safesort $ safesort --help
usage: safesort [-h] {scan,plan,apply,duplicates,undo} ...
 
SafeSort: a safe, non-destructive file organizer. scan/plan/duplicates are
read-only; 'apply' sorts and 'undo' restores files.
 
positional arguments:
{scan,plan,apply,duplicates,undo}
scan List files found under ROOT, grouped by category
(read-only).
plan Show the moves that would be made under ROOT, without
changing anything (read-only).
apply Move files under ROOT into Sorted/<category>/ and
record an undo manifest.
duplicates Report groups of files with identical content under
ROOT (read-only, never deletes).
undo Undo the most recent 'apply' run recorded under ROOT.
 
options:
-h, --help show this help message and exit
Praktyka: Analizowanie argumentów wiersza poleceń
Interaktywny Laptop w przeglądarce: Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →
Oficjalna dokumentacja
argparse — Parser for command-line options

Krótko

  • argparse.ArgumentParser add_subparsers() analizuje pięć podkomend SafeSort i sam tworzy tekst — help.
  • dest=„command”
  • Każdy handler zwraca 0 przy sukcesie i wartość różną od zera przy błędzie — to jest kod zwrotny całego programu.