如何使用 clap 的未指定参数
How to use unspecified arguments with clap
我想使用 clap 库创建一个 CLI 应用程序。我遇到的问题是我想像这样使用我的应用程序:
./my_app file.txt read2.txt -d
objective 是我可以在我的程序中以 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();
}
我使用测试版的 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()
along with a 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
我想使用 clap 库创建一个 CLI 应用程序。我遇到的问题是我想像这样使用我的应用程序:
./my_app file.txt read2.txt -d
objective 是我可以在我的程序中以 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();
}
我使用测试版的 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()
along with a 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