Rust
Argumenty wiersza poleceń
Szukaj…
Wprowadzenie
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!");
}
}