Sök…


Introduktion

Rusts standardbibliotek innehåller inte en korrekt argumentfördelare (till skillnad från argparse i Python), utan föredrar i stället detta till tredjepartslådor. Dessa exempel visar användningen av både standardbiblioteket (för att bilda en rå argumenthanterare) och clap som kan analysera kommandoradsargument mer effektivt.

Syntax

  • använd std :: env; // Importera env-modulen
  • låt args = env :: args (); // Spara en Args-iterator i args-variabeln.

Använda std :: env :: args ()

Du kan komma åt kommandoradsargumenten som skickas till ditt program med funktionen std::env::args() . Detta returnerar en Args iterator som du kan slinga över eller samla in i en Vec .

Iterating Through Arguments

use std::env;

fn main() {
    for argument in env::args() {
        if argument == "--help" {
            println!("You passed --help as one of the arguments!");
        }
    }
}

Samla in i en Vec

use std::env;

fn main() {
    let arguments: Vec<String> = env::args().collect();
    println!("{} arguments passed", arguments.len());
}

Du kan få fler argument än du förväntar dig om du ringer ditt program så här:

./example

Även om det ser ut som att inga argument överfördes är det första argumentet ( vanligtvis ) namnet på den körbara. Detta är dock ingen garanti, så du bör alltid validera och filtrera de argument du får.

Med klapp

För större kommandoradsprogram är användning av std::env::args() ganska tråkigt och svårt att hantera. Du kan använda clap att hantera ditt kommandoradsgränssnitt, som kommer att analysera argument, generera hjälpskärmar och undvika buggar.

Det finns flera mönster som du kan använda med clap , och var och en ger en annan mängd flexibilitet.

Builder mönster

Detta är den mest fullständiga (och flexibla) metoden, så den är användbar när du behöver finkornig kontroll av din CLI.

clap skiljer mellan subkommandon och argument . Underkommandon fungerar som oberoende underprogram i ditt huvudprogram, precis som cargo run och git push . De kan ha sina egna kommandoradsalternativ och ingångar. Argument är enkla flaggor som - --verbose , och de kan ta input (t.ex. - --message "Hello, world" )

extern crate clap;
use clap::{Arg, App, SubCommand};

fn main() {
    let app = App::new("Foo Server")
        .about("Serves foos to the world!")
        .version("v0.1.0")
        .author("Foo (@Example on GitHub)")
        .subcommand(SubCommand::with_name("run")
            .about("Runs the Foo Server")
            .arg(Arg::with_name("debug")
                .short("D")
                .about("Sends debug foos instead of normal foos.")))

    // This parses the command-line arguments for use.
    let matches = app.get_matches();

    // We can get the subcommand used with matches.subcommand(), which
    // returns a tuple of (&str, Option<ArgMatches>) where the &str
    // is the name of the subcommand, and the ArgMatches is an 
    // ArgMatches struct: 
    // https://docs.rs/clap/2.13.0/clap/struct.ArgMatches.html

    if let ("run", Some(run_matches)) = app.subcommand() {
        println!("Run was used!");
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow