1

我正在用 Rust 构建一个 CLI 实用程序。为简单起见,假设它执行作为命令行参数给出的任务。用户还可以通过参数选择性地指定谁请求了任务(例如“工程”或“人力资源”)和任务的优先级(“高”或“低”)。

我希望程序能够识别仅从值中指定的参数,即没有命令行标志。(参数的可能值不重叠。)例如,这些都应该有效:

app task1 HR

app task2 high

app task3 low Engineering

app task4 high HR

当然,我可以为此编写自定义逻辑,但我的问题是:我可以使用 crate 来解析命令行参数,例如clap吗?

Fwiw,我尝试使用 clap 中的ArgGroup结构来获得这种行为,但没有成功。所以:

use clap::{App,Arg,ArgGroup};

fn main() {

let m = App::new("app")
    .arg(Arg::with_name("task_name")
        .required(true))
    .arg(Arg::with_name("requested_by")
        .possible_values(&["HR","Engineering"])
        .required(false))
    .arg(Arg::with_name("priority")
        .possible_values(&["high","low"])
        .required(false))
    .group(ArgGroup::with_name("options")
        .arg("requested_by")
        .arg("priority")
        .multiple(true))
    .get_matches_from(vec!["app", "task1","high"]);
}

这坚持将“高”解析为 a requested_by,而不是 a priority,因此它给出:

错误:“高”不是“<requested_by>”的有效值 [可能的值:工程、人力资源]

用法:应用程序 <task_name> <requested_by|priority>

有关更多信息,请尝试 --help

4

0 回答 0