CLI-Framework für Rust: Vollständiger Leitfaden zur Entwicklung von Dienstprogrammen

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

CLI-Framework für Rust: Erstellung leistungsstarker Konsolenanwendungen



Rust ist eine systemnahe Programmiersprache, die sich ideal für die Erstellung schneller und zuverlässiger Konsolen-Dienstprogramme eignet. Dank strenger Typisierung, Nullkosten-Abstraktionen und dem integrierten Paketmanager Cargo ermöglicht Rust die Entwicklung von CLI-Tools, die sofort arbeiten und keinen Interpreter benötigen. In diesem Artikel betrachten wir drei beliebte CLI-Frameworks für Rust: clap, structopt und argh, und zeigen, wie man mit ihnen professionelle Konsolenanwendungen erstellt.



Warum Rust für CLI?

Rust wird aus mehreren Gründen für die CLI-Entwicklung gewählt:

  • Leistung — kompilierter Code arbeitet auf dem Niveau von C/C++.
  • Speichersicherheit — das Ownership-System schließt Speicherlecks und Datenrennen aus.
  • Plattformunabhängigkeit — eine Codebasis funktioniert unter Windows, macOS und Linux.
  • Ökosystem — Tausende fertiger Crates für jede Aufgabe.


1. Clap — der Industriestandard

clap (Command Line Argument Parser) ist das beliebteste Framework zum Parsen von Befehlszeilenargumenten in Rust. Es unterstützt Positionsargumente, Optionen, Flags, Unterbefehle, automatische Hilfegenerierung und Autovervollständigung für Bash/Zsh/Fish.



Installation

Fügen Sie in Cargo.toml hinzu:

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


Beispiel: Ein einfacher Taschenrechner

use clap::Parser;

#[derive(Parser)]#[command(name = "calc")]#[command(about = "Einfacher CLI-Taschenrechner")]struct Cli { /// Erste Zahl a: f64,

/// Zweite Zahl b: f64,

/// Operation: add, sub, mul, div #[arg(short, long, default_value = "add")] operation: String,}

fn main() { let cli = Cli::parse(); let result = match cli.operation.as_str() { "add" => cli.a + cli.b, "sub" => cli.a - cli.b, "mul" => cli.a * cli.b, "div" => { if cli.b == 0.0 { eprintln!("Fehler: Division durch Null"); std::process::exit(1); } cli.a / cli.b } _ => { eprintln!("Unbekannte Operation: {}", cli.operation); std::process::exit(1); } }; println!("Ergebnis: {}", result);}

Ausführung:

cargo run -- 10 5 --operation mul# Ausgabe: Ergebnis: 50


2. Structopt — eleganter Ansatz

structopt war früher eine separate Crate, aber seine Funktionalität ist jetzt über derive-Makros in clap integriert. Viele ältere Projekte verwenden es jedoch weiterhin direkt. Structopt ermöglicht es, Argumente als Felder einer Struktur mit Annotationen zu beschreiben.



Installation (für Legacy-Projekte)

[dependencies]structopt = "0.3"


Beispiel: Dienstprogramm für Dateiarbeit

use structopt::StructOpt;use std::path::PathBuf;

#[derive(StructOpt)]#[structopt(name = "fileutil", about = "Dienstprogramm für Dateiarbeit")]struct Opt { /// Eingabedatei #[structopt(parse(from_os_str))] input: PathBuf,

/// Ausgabedatei (optional) #[structopt(parse(from_os_str), short = "o", long = "output")] output: Option<PathBuf>,

/// Modus: copy oder move #[structopt(short, long, default_value = "copy")] mode: String,

/// Verbose-Flag #[structopt(short, long)] verbose: bool,}

fn main() { let opt = Opt::from_args(); if opt.verbose { println!("Verarbeite Datei: {:?}", opt.input); } // Logik zum Kopieren/Verschieben}


3. Argh — Minimalismus und Geschwindigkeit

argh ist ein leichtes Framework mit minimalen Abhängigkeiten

Empfehlungen