rust 我怎样才能让clap忽略某个子命令后的标志?

yuvru6vn  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(174)

假设我正在编写一个名为foo的命令行程序,使用clap作为参数解析器:

#[derive(Debug, Parser)]
struct Cli {
    #[command(subcommand)]
    pub command: Commands,
}

#[derive(Debug, Subcommand)]
enum Commands {
    Run {
        executable: OsString,
        args: Vec<OsString>,
    },
}

它应该做的事情之一是运行其他命令行程序,例如,要告诉foo运行可执行文件bar,用户可以运行:

foo run bar

如果用户尝试传递bar的标志:

foo run bar --baz

...我希望将它们捕获为原始参数,以便可以将它们直接传递给bar,如下所示:

Cli {
    command: Run {
        executable: "bar",
        args: [
            "--baz",
        ],
    },
}

但是,clap并没有将其作为原始参数捕获,而是将其解析为一个标志,供foo处理。
有没有办法让clap忽略它在某个点之后看到的任何标志?
我知道用户可以告诉clap停止将后续参数解析为标记,如下所示:

foo run -- bar --baz

如果可能的话,我希望避免这种解决方法,因为它比必要的更冗长,而且从用户的Angular 来看,它有点违反直觉。通常,您放入--是为了避免将args作为标志处理,而不是相反。

pftdvrlh

pftdvrlh1#

尝试构建器界面www.example.com中的trailing_var_arg方法https://docs.rs/clap/latest/clap/builder/struct.Arg.html#method.trailing_var_arg

相关问题