拍手
对于较大的命令行程序,使用 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!");
}
}