动态生成参数Clap

问题描述

我试图弄清楚如何使用Clap从输入参数中动态生成参数。

我要用Clap模仿的是以下python代码:

parser = argparse.ArgumentParser()
parser.add_argument("-i",type=str,nargs="*")
(input_args,additional_args) = parser.parse_known_args()
for arg in input_args:
  parser.add_argument(f'--{arg}-bar',required=true,type=str)

additional_config = parser.parse_args(additional_args)

这样您就可以在命令中执行以下操作:

./foo.py -i foo bar baz --foo-bar foo --bar-bar bar --baz-bar bar

,并从第一个参数动态生成其他参数。不确定是否可以在Clap中进行操作,但我认为这是有可能的,这是由于 Readme 指出您可以使用构建器模式来动态生成参数[1]。

这是我尝试这样做的天真尝试。

use clap::{Arg,App};

fn main() {
  let mut app = App::new("foo")
               .arg(Arg::new("input")
               .short('i')
               .value_name("INPUT")
               .multiple(true)
               .required(true));
  let matches = app.get_matches_mut();
  let input: Vec<_> = matches.values_of("input").unwrap().collect()
  for i in input {
    app.arg(Arg::new(&*format!("{}-bar",i)).required(true))
  }
}

!format的生命周期和app.arg期间,编译器显然都不会对您大喊大叫,我最感兴趣的是解决如何生成app的新参数,然后被再次匹配。我刚接触过锈,所以很有可能用Clap无法做到。

[1] https://github.com/clap-rs/clap

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)