Szukaj…


Wprowadzenie

Standardowa biblioteka Rust'a nie zawiera odpowiedniego parsera argumentów (w przeciwieństwie do argparse w Pythonie), zamiast tego woli pozostawić to skrzynkom innych firm. Te przykłady pokażą użycie zarówno biblioteki standardowej (w celu utworzenia prostego programu obsługi argumentów), jak i biblioteki clap która może bardziej efektywnie analizować argumenty wiersza poleceń.

Składnia

  • użyj std :: env; // Zaimportuj moduł env
  • niech args = env :: args (); // Przechowaj iterator Args w zmiennej args.

Korzystanie ze std :: env :: args ()

Dostęp do argumentów wiersza poleceń przekazywanych do programu można uzyskać za pomocą funkcji std::env::args() . Zwraca iterator Args który można zapętlić lub zebrać w Vec .

Iteracja po argumentach

use std::env;

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

Zbieranie do Vec

use std::env;

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

Możesz uzyskać więcej argumentów, niż się spodziewasz, jeśli wywołasz swój program w następujący sposób:

./example

Chociaż wygląda na to, że nie przekazano żadnych argumentów, pierwszym argumentem jest ( zwykle ) nazwa pliku wykonywalnego. Nie jest to jednak gwarancją, dlatego zawsze powinieneś sprawdzać i filtrować otrzymane argumenty.

Za pomocą klaśnięcia

W przypadku większych programów wiersza poleceń użycie std::env::args() jest dość żmudne i trudne do zarządzania. Możesz użyć clap do obsługi interfejsu wiersza poleceń, który będzie analizował argumenty, generował ekrany pomocy i unikał błędów.

Istnieje kilka wzorów , których można używać z clap , a każdy z nich zapewnia inną elastyczność.

Wzór konstruktora

Jest to najbardziej szczegółowa (i elastyczna) metoda, więc jest przydatna, gdy potrzebujesz dokładnej kontroli swojego interfejsu CLI.

clap rozróżnia podkomendy i argumenty . Podkomendy działają jak niezależne podprogramy w twoim głównym programie, podobnie jak cargo run i git push . Mogą mieć własne opcje wiersza polecenia i dane wejściowe. Argumenty są prostymi flagami, takimi jak --verbose , i mogą przyjmować dane wejściowe (np. --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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow