Rust
Аргументы командной строки
Поиск…
Вступление
argparse
в Python), вместо этого предпочитая оставить это в сторонних ящиках. В этих примерах будет показано использование как стандартной библиотеки (для формирования грубого обработчика аргументов), так и библиотеки clap
которая может более эффективно анализировать аргументы командной строки.
Синтаксис
- используйте std :: env; // Импортируем модуль env
- пусть args = env :: args (); // Храните итератор Args в переменной args.
Использование std :: env :: args ()
Вы можете получить доступ к аргументам командной строки, переданным вашей программе, используя функцию std::env::args()
. Это возвращает итератор Args
который вы можете перебрать или собрать в Vec
.
Итерация через аргументы
use std::env;
fn main() {
for argument in env::args() {
if argument == "--help" {
println!("You passed --help as one of the arguments!");
}
}
}
Сбор в Vec
use std::env;
fn main() {
let arguments: Vec<String> = env::args().collect();
println!("{} arguments passed", arguments.len());
}
Вы можете получить больше аргументов, чем вы ожидаете, если вы вызовете свою программу следующим образом:
./example
Хотя похоже, что никакие аргументы не были переданы, первым аргументом является ( обычно ) имя исполняемого файла. Однако это не гарантия, поэтому вы всегда должны проверять и фильтровать аргументы, которые вы получаете.
Использование хлопка
Для более крупных программ командной строки использование std::env::args()
довольно утомительно и трудно справляется. Вы можете использовать clap
для обработки интерфейса командной строки, который будет анализировать аргументы, создавать справки и избегать ошибок.
Существует несколько шаблонов, которые вы можете использовать с clap
, и каждый из них обеспечивает различную гибкость.
Шаблон Builder
Это самый подробный (и гибкий) метод, поэтому он полезен, когда вам нужен мелкомасштабный контроль над вашим CLI.
clap
различает подкоманды и аргументы . Подкоманды действуют как независимые подпрограммы в вашей основной программе, точно так же, как cargo run
и git push
. Они могут иметь свои собственные параметры командной строки и входные данные. Аргументы - это простые флаги, такие как --verbose
, и они могут принимать входные данные (например, - --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!");
}
}