拍手

对于较大的命令行程序,使用 std::env::args() 非常繁琐且难以管理。你可以使用 clap 来处理命令行界面,该界面将解析参数,生成帮助显示并避免错误。

有几种模式可以与 clap 一起使用,每种模式都提供不同的灵活性。

生成器模式

这是最详细(和灵活)的方法,因此当你需要对 CLI 进行细粒度控制时,它非常有用。

clap 区分子命令参数。子命令就像主程序中的独立子程序一样,就像 cargo rungit 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!");
    }
}