Поиск…


Вступление

Стандартная библиотека 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!");
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow