拍手

對於較大的命令列程式,使用 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!");
    }
}