Clap für Rust: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist Clap und wozu wird es benötigt?

\n\n

Clap (Command Line Argument Parser) ist eine leistungsstarke, schnelle und benutzerfreundliche Bibliothek zum Parsen von Kommandozeilenargumenten in der Sprache Rust. Sie ermöglicht Entwicklern, einfach zu definieren, welche Argumente, Flags, Optionen und Unterbefehle ihre Anwendung akzeptieren soll, generiert automatisch Hilfe (--help), überprüft Datentypen und verarbeitet Eingabefehler.

\n\n

Wozu wird Clap benötigt? Anstatt manuell std::env::args() zu parsen und Dutzende von Codezeilen für die Validierung zu schreiben, erledigt Clap die gesamte Arbeit für Sie. Sie beschreiben einfach die Struktur Ihrer CLI, und die Bibliothek übernimmt das Parsen, die Generierung von Fehlermeldungen und die Formatierung von Hinweisen. Clap unterstützt:

\n
    \n
  • Positionsargumente (obligatorisch und optional).
  • \n
  • Benannte Optionen (Flags) mit kurzen und langen Namen.
  • \n
  • Unterbefehle (wie in git commit).
  • \n
  • Auto-Vervollständigung für Shells (bash, zsh, fish, PowerShell).
  • \n
  • Wertvalidierung, Standardwerte, Mehrfachwerte und vieles mehr.
  • \n
\n\n

Clap ist der De-facto-Standard für die Erstellung von CLI-Anwendungen im Rust-Ökosystem. Es wird in bekannten Projekten wie cargo, ripgrep (rg), fd und vielen anderen verwendet.

\n\n

Installation

\n\n

Clap ist eine Bibliothek für Rust und wird daher über den Paketmanager cargo installiert. Fügen Sie die folgende Zeile zu Ihrer Cargo.toml-Datei hinzu:

\n\n
[dependencies]\nclap = { version = "4.5", features = ["derive"] }
\n\n

Wir empfehlen die Verwendung von derive-Makros (Feature derive), da dies die modernste und bequemste Art ist, mit Clap zu arbeiten. Wenn Sie nur die grundlegende Funktionalität ohne derive benötigen, können Sie schreiben:

\n\n
[dependencies]\nclap = "4.5"
\n\n

Führen Sie nach dem Hinzufügen der Abhängigkeit den Befehl cargo build aus, um die Bibliothek herunterzuladen und zu kompilieren.

\n\n

Schnellstart mit einem Codebeispiel

\n\n

Lassen Sie uns eine einfache Anwendung erstellen, die einen Benutzernamen und ein optionales Begrüßungs-Flag akzeptiert. Erstellen Sie ein neues Projekt:

\n\n
cargo new hello_clap\ncd hello_clap
\n\n

Ersetzen Sie den Inhalt von src/main.rs durch den folgenden Code:

\n\n
use clap::Parser;\n\n/// Einfaches Programm zur Begrüßung\n#[derive(Parser)]\n#[command(name = "greeter")]\n#[command(about = "Begrüßt den Benutzer", long_about = None)]\nstruct Cli {\n    /// Name des Benutzers\n    name: String,\n\n    /// Anzahl der Wiederholungen der Begrüßung\n    #[arg(short = 'c', long = "count", default_value_t = 1)]\n    count: u8,\n}\n\nfn main() {\n    let cli = Cli::parse();\n\n    for _ in 0..cli.count {\n        println!("Hallo, {}!", cli.name);\n    }\n}
\n\n

Starten Sie nun das Programm:

\n\n
cargo run -- Welt\n# Ausgabe: Hallo, Welt!\n\ncargo run -- Welt -c 3\n# Ausgabe:\n# Hallo, Welt!\n# Hallo, Welt!\n# Hallo, Welt!\n\ncargo run -- --help\n# Ausgabe der Hilfe
\n\n

Wie Sie sehen, hat Clap automatisch die Hilfe generiert, die Argumente verarbeitet und eine Typüberprüfung durchgeführt (wenn Sie -c keine Zahl übergeben, wird ein Fehler ausgegeben).

\n\n

Wichtige Methoden und Funktionen von Clap

\n\n

Betrachten wir die wichtigsten Methoden und Attribute, die Clap bereitstellt. Wir verwenden den Ansatz mit derive-Makros, da dieser am weitesten verbreitet ist.

\n\n

1. #[derive(Parser)]

\n

Was es tut: Verwandelt Ihre Struktur in einen Kommandozeilen-Parser. Dies ist das Hauptmakro, mit dem alles beginnt. Es implementiert automatisch das Parser-Trait für Ihre Struktur.

\n

Parameter: Attribute der Struktur (#[command(...)]) und der Felder (#[arg(...)]).

\n

Beispiel:

\n
use clap::Parser;\n\n#[derive(Parser)]\n#[command(name = "myapp")]\nstruct C                    

Empfehlungen