首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在clap中使用未指定的参数

如何在clap中使用未指定的参数
EN

Stack Overflow用户
提问于 2020-12-29 23:10:17
回答 1查看 455关注 0票数 1

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

代码语言:javascript
复制
./my_app file.txt read2.txt -d

目标是我可以以Vec的形式以file.txt read2.txt值的形式在程序中恢复。

我的代码:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-29 23:26:15

要使参数接受零到多值,只需指定multiple: true

代码语言:javascript
复制
- files:
    multiple: true

然后使用values_of()collect::>()获得文件

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65499965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档