我希望有一个命令,这样do_something --list 1 2 3
将导致结构中的字段被设置为[1, 2, 3]
。
以下代码适用于do_something --list 1 --list 2 --list 3
:
use clap::Parser; // 3.2.8
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
pub struct Cli {
#[clap(short, long, value_parser)]
pub list: Option<Vec<i32>>,
}
fn main() {
let cli = Cli::parse();
println!("CLI is {:#?}", cli);
}
当我使用--list 1 2 3
时,它给了我错误:
错误:找到了不需要的参数“% 2”,或该参数在此上下文中无效
我也试过--list "1 2 3"
和--list 1,2,3
,但也有错误。
我还可以获得多个值作为位置参数,但不能作为带标志的Option
。
clap支持--list 1 2 3
吗?我认为这是由clap的多重价值观支持的。我的设置/代码或命令行输入中是否缺少了什么?
2条答案
按热度按时间hujrc8aj1#
您正在查找
use_value_delimiter
设置。设置use_value_delimiter = true
并设置要与value_delimiter = ','
一起使用的实际分隔符。f87krz0w2#
在clap 4.2.7中,
use_value_delimiter
被弃用,这意味着接受的答案不再有效,而应该使用num_args = 1..