CLI-Framework für Rust: Clap – ein leistungsstarkes und praktisches Tool zur Erstellung von Konsolenanwendungen

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 warum wird es benötigt?



In der Welt der Systemprogrammierung hat sich Rust als eine Sprache etabliert, die die Leistung von C/C++ mit Speichersicherheit kombiniert. Bei der Erstellung von Konsolen-Dienstprogrammen stehen Entwickler jedoch oft vor der Routineaufgabe des Parsens von Befehlszeilenargumenten. Die Bibliothek Clap (Command Line Argument Parser) ist das beliebteste und funktionsreichste CLI-Framework für Rust, das die gesamte Arbeit der Verarbeitung von Flags, Optionen und Unterbefehlen übernimmt.



Clap ermöglicht:

  • Automatische Generierung von Hilfe (--help) und Version (--version);
  • Verarbeitung von Positionsargumenten, benannten Optionen und Flags;
  • Erstellung von verschachtelten Unterbefehlen (wie in git oder cargo);
  • Validierung von Datentypen und Überprüfung der Pflichtangabe von Argumenten;
  • Arbeit mit Autovervollständigung für die Shells Bash, Zsh, Fish und PowerShell.


Dank des leistungsstarken derive-Makros und der deklarativen API reduziert Clap den Codeumfang im Vergleich zum manuellen Parsen um das 5- bis 10-fache. Die Bibliothek unterstützt sowohl einfache Dienstprogramme als auch komplexe Schnittstellen mit Dutzenden von Optionen.



Installation von Clap in einem Rust-Projekt



Fügen Sie die Abhängigkeit in Cargo.toml hinzu:



[dependencies]clap = { version = "4.5", features = ["derive"] }


Das Flag features = ["derive"] aktiviert die Unterstützung für Makros – dies ist die empfohlene Methode für die meisten Projekte. Für minimalistische Dienstprogramme kann nur die Builder-API (ohne derive) verwendet werden.



Beispiel 1: Einfachster Parser mit dem derive-Makro



Erstellen wir ein Dienstprogramm, das einen Benutzernamen und ein optionales Begrüßungsflag akzeptiert:



use clap::Parser;

#[derive(Parser)]#[command(name = "greet")]#[command(about = "Einfache Begrüßung", long_about = None)]struct Cli { /// Benutzername name: String,

/// Begrüßung in Großbuchstaben ausgeben #[arg(short, long)] uppercase: bool,}

fn main() { let cli = Cli::parse();

let greeting = format!("Hallo, {}!", cli.name); if cli.uppercase { println!("{}", greeting.to_uppercase()); } else { println!("{}", greeting); }}


Starten Sie das Programm:



$ cargo run -- WeltHallo, Welt!

$ cargo run -- Welt --uppercaseHALLO, WELT!

$ cargo run -- --help# Automatisch generierte Hilfe


Beispiel 2: Optionen mit Typen und Standardwerten



Clap konvertiert Zeichenketten automatisch in die erforderlichen Typen (Zahlen, Aufzählungen, Daten). Fügen wir eine Option zur Angabe der Wiederholungsanzahl hinzu:



use clap::Parser;

#[derive(Parser)]#[command(name = "repeat")]struct Cli { /// Text zum Wiederholen text: String,

/// Anzahl der Wiederholungen (Standard: 1) #[arg(short, long, default_value_t = 1)] count: u32,}

fn main() { let cli = Cli::parse(); for _ in 0..cli.count { println!("{}", cli.text); }}


Jetzt können Sie ausführen:



$ cargo run -- "Rust" -c 3RustRustRust


Beispiel 3: Unterbefehle (Subcommands) – wie in Git



Erstellen wir ein Mini-Dienstprogramm zur Aufgabenverwaltung (Todo-Liste) mit den Befehlen add, list und done:



use clap::{Parser, Subcommand};

#[derive(Parser)]#[command(name = "todo")]#[command(about = "Aufgabenverwaltung")]struct Cli { #[command(subcommand)] command: Commands,}

#[derive(Subcommand)]enum Commands { /// Neue Aufgabe hinzufügen Add { /// Aufgabentext task: String, }, /// Alle Aufgaben anzeigen List, /// Aufgabe als erledigt markieren Done { /// Aufgaben-ID id: u32, },}

fn main() { let cli = Cli::parse();

match &cli.comman

Empfehlungen