rust - 如何通过拍手使用未指定的参数

标签 rust clap

我想使用拍手库创建一个CLI应用程序。我的问题是我想这样使用我的应用程序:

./my_app file.txt read2.txt -d
目的是我可以使用Vec值的file.txt read2.txt形式在程序中进行恢复。
我的代码:
use clap::{App, load_yaml};

#[derive(Debug)]
enum EFlag {
    Debug,
    None,
}

#[derive(Debug)]
pub struct Flag {
    debug: EFlag,
}

impl Flag {
    pub fn new() -> Flag {
        Flag {
            debug: EFlag::None,
        }
    }

    pub fn fill_flag(&mut self) {
        let yaml = load_yaml!("cli.yaml");
        let matches = App::from(yaml).get_matches();

        match matches.is_present("debug") {
            true => self.debug = EFlag::Debug,
            _ => self.debug = EFlag::None,
        }
        // HERE I WANT TO RECEIVE file.txt file2.txt
    }
}
fn main() {
    let mut flag = Flag::new();
    flag.fill_flag();
}
我使用beta版的clap创建了一个Yaml文件来管理标志。
yaml文件:
name: bs-script
version: "1.0.0"
author: Clement B. <clement.bolin@epitech.eu>
about: Write perform, secure and easy script with an Rust script interpretor
args:
  - debug:
      short: d
      long: debug
      about: display debug information

最佳答案

要使参数接受零到多的值,您只需要指定multiple: true即可。

- files:
    multiple: true
然后,使用 values_of() collect::<Vec<&str>>() 来获取文件:
if let Some(files) = matches.values_of("files") {
    let files = files.collect::<Vec<_>>();

    println!("{:?}", files);
}

// Prints nothing                     for `cargo run -- -d`
// Prints `["file.txt"]`              for `cargo run -- file.txt -d`
// Prints `["file.txt", "read2.txt"]` for `cargo run -- file.txt read2.txt -d`

这是完整的cli.yaml:
name: bs-script
version: "1.0.0"
author: Clement B. <clement.bolin@epitech.eu>
about: Write perform, secure and easy script with an Rust script interpretor
args:
  - files:
      multiple: true
      about: Files
  - debug:
      short: d
      long: debug
      about: display debug information

关于rust - 如何通过拍手使用未指定的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65499965/

相关文章:

python - 解析 docopt 参数类型(任何语言)

rust - clap::App 多次移动所有权的方法调用

rust - Clap 无法解析 YAML 文件 : failed to convert YAML String ("1") value to a string

rust - 在Clap中的参数中采用多个值

rust - 如何使用 Clap 派生解析自定义字符串

rust - 特质 `std::convert::From<cli::Opts>`未实现

macros - 如何在宏中包装一个 do-while 样式循环,保持 'continue' 流控制?

Rust mod 面临问题错误 : file not found for module bytes

rust - 以不同于其 JSON 键的方式格式化结构字段

Eclipse RLS 配置文件丢失?