rust clap 解析命令行

clap 解析命令行

方式 1(案例): build

pub fn get_config_2() -> (String, u16) {
    use clap::{arg, Arg, ArgAction, Command};

    let matches = Command::new("Server Configuration.")
        .version("1.0")
        .author("Kevin")
        .about("Does connection things")
        .arg(
            Arg::new("server")
                .short('a')
                .long("server")
                .action(ArgAction::Set)
                .value_name("IP OR Domain")
                .help("The address for accept incoming connection or connect to target.")
                .required(true),
        )
        .arg(
            arg!(-p --port <PORT> "Target server port.")
                .required(true)
                .value_parser(clap::value_parser!(u16).range(1024..6000)),
        )
        .arg(arg!([input] "an optional input file to use"))
        .get_matches();

    let s = matches.get_one::<String>("server").expect("required");
    println!("server: {:?}", s);
    let p = matches.get_one::<u16>("port").expect("required");
    println!("port: {}", *p);

    (String::from(s), *p)
}

解析 u16

  • 需添加 value_parser 限制
arg!(-p --port <PORT> "Target server port.")
                .required(true)
                .value_parser(clap::value_parser!(u16).range(1024..6000))

方式2(案例): derive 特征

  • Cargo.toml 中添加以下内容
clap = {version = "4", features = ["derive"]}
use clap::Parser;

/// Configuration !
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct ConfigArgs {
    /// The address for accept incoming connection or connect to target.
    #[arg(short = 'l', long, value_name = "ADDR")]
    pub addr: String,

    /// Port.
    #[arg(short, long = "PORT", default_value_t = 1080)]
    pub port: u16,

    #[arg()]
    pub verbose:Option<bool>
}

pub fn get_config() -> (String, u16) {
    let arguments = ConfigArgs::parse();
    let i = arguments.verbose;
    (arguments.addr, arguments.port)
}


配置说明

  • /// 开头的表示配置说明
/// Configuration !
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct ConfigArgs {
}

选项

  • short: 短选项参数名 ; 可修改短命令; 默认为成员字段首字母
  • long: 长参数名; 可修改长命令
  • default_value_t: 修改默认值

参数

  • #[arg()]: 为 ARGUMENTS, 必须为其提供值.若不提供值,可用 Option 修饰.

可选参数或选项

  • 当成员参数用 Option 修饰时, 可忽略该参数
pub verbose:Option<bool>

命令解析参数

pub fn get_config() -> (String, u16) {
    let arguments = ConfigArgs::parse();
    let i = arguments.verbose;
    (arguments.addr, arguments.port)
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值