繁体   English   中英

rust clap 如何指定命令行参数的类型

[英]rust clap How to specify the type of command line arguments

我正在使用 Rust 的 clap 来调查命令行参数。 是否可以指定哪一个将作为 clap 中的命令行参数输入? 是否可以在以下 python 代码中指定type=int之类的类型?

parser = argparse.ArgumentParser()
parser.add_argument("--some_string", type=str, required=True, )

我正在寻找的是在定义它们的阶段指定命令行参数的类型,如上面的 python 代码。

我想用 clap 来做以下事情

./target/release/~~ --i32_args 12 --f32_args -32.5

因此,如果类型和变量匹配,我们希望它能正常工作。

./target/release/~~ --i32_args -32 --f32_args 1

在这种情况下,我想立即引起恐慌并终止操作。 我要找的是不使用value_of等方法,而是在执行命令时判断命令行参数的类型,类型正确则执行,类型错误则立即 panic .

据我了解,在value_of_t中,直到检索到数据后才确定类型。 因此,我认为它与我正在寻找的不同。

派对有点晚了,但你可以将value_parser与 Clap v4 一起使用

use clap::{arg, value_parser, Command}; // Clap v4
use std::net::Ipv4Addr;

fn main() {
    let matches = Command::new("clap-test")
        .arg(
            arg!(--ip <VALUE>)
                .default_value("127.0.0.1")
                .value_parser(value_parser!(Ipv4Addr)),
        )
        .arg(
            arg!(--port <VALUE>)
                .required(true)
                .value_parser(value_parser!(u16)),
        )
        .arg(arg!(--f32 <VALUE>).value_parser(value_parser!(f32)))
        .get_matches();

    println!(
        "ip {:?}, port {:?}, float {:?}",
        matches.get_one::<Ipv4Addr>("ip").expect("required"),
        matches.get_one::<u16>("port").expect("required"),
        matches.get_one::<f32>("f32"),
    );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM