拍手
對於較大的命令列程式,使用 std::env::args()
非常繁瑣且難以管理。你可以使用 clap
來處理命令列介面,該介面將解析引數,生成幫助顯示並避免錯誤。
有幾種模式可以與 clap
一起使用,每種模式都提供不同的靈活性。
生成器模式
這是最詳細(和靈活)的方法,因此當你需要對 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!");
}
}