[英]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.