Rust命令行参数解析:clap库使用指南
简介
clap (Command Line Argument Parser) 是Rust生态系统中最流行的命令行参数解析库之一。它提供了直观的API和丰富的功能,使得构建命令行应用变得简单。
基本使用
1. 添加依赖
1 2
| [dependencies] clap = "2.33"
|
2. 创建命令行应用
1 2 3 4 5 6 7 8
| use clap::{App, Arg};
fn main() { let app = App::new("blockchain-demo") .version("0.1") .author("Your Name") .about("区块链演示程序"); }
|
3. 添加子命令
1 2 3 4 5 6 7 8 9
| let app = App::new("blockchain-demo") .version("0.1") .author("Your Name") .about("区块链演示程序") .subcommand(App::new("printchain")) .subcommand( App::new("addblock") .arg(Arg::from_usage("<data> 'the blockchain data'")) );
|
4. 解析参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| fn main() { let matches = app.get_matches();
match matches.subcommand() { ("printchain", Some(_)) => { println!("打印区块链"); } ("addblock", Some(add_matches)) => { if let Some(data) = add_matches.value_of("data") { println!("添加区块: {}", data); } } _ => println!("未知命令"), } }
|
参数处理方法
1. 检查子命令
1 2 3
| if let Some(ref matches) = matches.subcommand_matches("addblock") { }
|
2. 获取参数值
1 2 3
| if let Some(value) = matches.value_of("参数名") { }
|
3. 获取多值参数
1 2 3 4 5
| if let Some(values) = matches.values_of("参数名") { for value in values { } }
|
命令行使用示例
查看帮助
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| blockchain-demo 0.1 Your Name 区块链演示程序
USAGE: blockchain-demo [SUBCOMMAND]
FLAGS: -h, --help Prints help information -V, --version Prints version information
SUBCOMMANDS: addblock help Prints this message or the help of the given subcommand(s) printchain
|
执行子命令
1 2 3 4 5
| cargo run -- printchain
cargo run -- addblock "这是第一个区块的数据"
|
高级特性
1. 参数验证
1 2 3 4 5 6 7 8 9
| .arg(Arg::with_name("count") .short("c") .long("count") .takes_value(true) .validator(|s| { s.parse::<i32>() .map(|_| ()) .map_err(|_| String::from("必须是数字")) }))
|
2. 默认值
1 2 3
| .arg(Arg::with_name("name") .long("name") .default_value("default"))
|
3. 参数组
1 2 3
| .args_group(ArgGroup::with_name("group") .args(&["arg1", "arg2"]) .required(true))
|