gpt4 book ai didi

rust - 如何区分多次出现的选项和带有 structopt 的后续可选参数?

转载 作者:行者123 更新时间:2023-11-29 08:29:10 35 4
gpt4 key购买 nike

我正在使用 structopt 来定义可以使用的参数

mfe -s opt1 -s opt2 -s opt2 this_is_an_argument

mfe -s opt1 opt2 opt3 this_is_an_argument

问题是 this_is_an_argument 参数被解析为一个选项。我知道我可以在参数之前使用 --,但是有更好的解决方案吗?

use std::path::PathBuf;
use structopt::StructOpt;

#[derive(StructOpt, Debug)]
struct CLIArgs {
#[structopt(short = "s", long = "str")]
strings: Vec<String>,

#[structopt(name = "PATH", parse(from_os_str))]
path: Option<PathBuf>,
}

fn main() {
let args = CLIArgs::from_args();
println!("{:?}", args);
}
$ mfe -s foo bar baz /this/is/a/path
CLIArgs { strings: ["foo", "bar", "baz", "/this/is/a/path"], path: None }

我希望 /this/is/a/path 被解析为 path,而不是被迫使用 --。也许对参数的顺序做些什么?

最佳答案

于是我找到了以下解决方案:

use std::path::PathBuf;
use structopt::StructOpt;

#[derive(StructOpt, Debug)]
struct CLIArgs {
#[structopt(short = "s", long = "str", raw(number_of_values = "1"))]
strings: Vec<String>,

#[structopt(name = "PATH", parse(from_os_str))]
path: Option<PathBuf>,
}

fn main() {
let args = CLIArgs::from_args();
println!("{:?}", args);
}

请注意,它会强制用户以这种方式使用程序:

$ mfe -s foo -s bar -s baz /this/is/a/path

这可能会带来不便,具体取决于您的用例。

关于rust - 如何区分多次出现的选项和带有 structopt 的后续可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54716285/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com