1 个不稳定版本
0.1.1 | 2021年7月16日 |
---|---|
0.1.0 |
|
#582 in 配置
6.5MB
124 行
包含 (Mach-o 可执行文件, 460KB) target/release/simple_getopt,(Mach-o 可执行文件, 460KB) target/release/deps/simple_getopt,(Rust 库, 82KB) libarraylist-ab55d80cbc577b38.rlib,(Rust 库, 105KB) libsimple_getopt-c85389c2e3c16031.rlib,(Rust 库, 105KB) target/release/libsimple_getopt.rlib
simple_getopt
名称
simple_getopt
-- 另一种简单的命令行选项解析工具 - (YAGPCUBEAS).
安装
在 Cargo.toml 文件中
[dependancies]
simple_getopt = "0.1.0"
在 main.rs 文件中
使用方法
use simple_getopt::Getopt;
描述
simple_getopt
- 通过拆分每个选项以方便使用来解析命令行选项。这个crate可以轻松解析CLI选项,让用户无障碍地使用。
simple_getopt
返回一个只读的哈希表实现。因此,所有从CLI给出的选项分为两类
- 没有附加值的标志/开关。这些被视为
boolean
值。 - 附加了值的选项。这些可以作为HashMap的常规键/值使用。
应该强调的是 simple_getopt
的任务是解析(即优雅地拆分)从CLI给出的选项,并允许用户专注于如何使用这些选项,而不必担心格式。返回的选项是只读的。所以,用户或程序无法修改从CLI给出的选项,因此不会有惊喜。
示例
use getopt::Getopt;
use std::env
...
// using the following from the CLI
// cargo run -- -a=[1, 2, 3, 4, 5] -b=[6, 7, 8, 9, 10] -c=[11, 12, 13]
fn main() {
// All you need. CLI options parsed there.
let parser = Getopt::std(&std::env::args().collect::<Vec<_>>());
for val in ["a", "b", "c"].iter() {
if parser.exists(val) {
println!(
"{:?}",
&parser[val]
.chars()
.map(|a| u64::from_str(&a.to_string()))
.map(|a| if let Ok(a) = a { a } else { 0 })
.sum::<u64>()
); // 15, 40, 36
}
}
}
use getopt::Getopt;
use std::env
use std::fs::File;
use std::io::{BufRead, BufReader};
...
let parse = Getopt::std(&env::args().collect::<Vec<_>>()); // parsing done.
// if you have an option -i with a value which is a valid file
// it reads the file to the standard output device.
if parse.exists("i") {
let file = File::open(&parse["i"]).unwrap();
let buf = BufReader::new(file);
for line in buf.lines() {
println!("{}", line.unwrap());
}
}
use getopt::Getopt;
use std::env
...
let parse = Getopt::std(&env::args().collect::<Vec<_>>()); // parsing done.
// print all keys and values
println!("{}, {}", parse.get_keys(), parse.get_values());
// cargo run -- -x=12 -y=24
println!(
"{:?}",
parse["x"].parse::<u64>().unwrap() + parse["y"].parse::<u64>().unwrap()
); // 36
// User need `use std::str::FromStr;` for below code to work
println!(
"{}",
u64::from_str(&parse["x"]).unwrap() + u64::from_str(&parse["y"]).unwrap()
); // 36
Simple-Getopt 方法
simple_getopt
返回一个只读的哈希表实现。因此,提供了以下函数使用
-
std
pub fn std(arr: &[String]) -> Getopt
- 这是一个关联函数。它接收String切片的引用并返回结构Getopt。这是获取从CLI给出的所有选项的函数。用户 不需要 跳过任何选项,包括程序名称。
let parser = Getopt::std(&env::args().collect::<Vec<_>>());
-
get_keys
pub fn get_keys(&self) -> ArrayList<String>
- 此函数返回所有标志和选项的集合,作为键/值选项的键。
ArrayList
是Rust向量的包装。它开箱即用。
println!("Keys: {}", parser.get_keys()); //or parser.get_keys().print(); //.print() is from ArrayList
- 此函数返回所有标志和选项的集合,作为键/值选项的键。
-
get_values
pub fn get_values(&self) -> ArrayList<String>
- 此函数返回键/值选项中所有标志和选项的集合作为值。
ArrayList
是 Rust 向量的包装。它开箱即用。
println!("Values: {}", parser.get_values()); //or parser.get_values().print(); //.print() is from ArrayList
- 此函数返回键/值选项中所有标志和选项的集合作为值。
-
存在
pub fn exists(&self, key: &str) -> bool
- 它返回一个布尔值,要么是 false,要么是 true,如果提供的键是 CLI 选项中 getopt 返回的实例中的键。
设计限制
由于简洁性是此 crate 设计的核心,因此遵循以下设计选项
-
标志或开关是单字符的,并使用单个短横线,如下所示:
-a
-b
-c
。用户不能使用双短横线或一个以上的字母作为标志。即--file
不允许。 -
标志 不能 相结合,即
-abc
不允许。每个标志 必须 单独。这可能在未来的版本中改变。 -
具有键/值的选项也使用单短横线和字母。键 必须 使用等号
=
、空格:
与值分开。如下所示:-f=my_text_file.txt
或-o:output_file.txt
或'i input_file.db'
。 注意:如果使用空格分隔标志和值,则必须相应地引用它们。用户程序将因错误的分隔符而崩溃。
替代方案
在 Rust crate 中还有其他一些很好的 getopts。它们中的许多都非常详细、有见解且功能强大,但不如 simple_getopt
简单。如果您想检查它们,以便在需要更自定义 CLI 选项的情况下; clap
(https://crates.io/crates/clap)、structopt
(https://crates.io/crates/structopt)、argh
(https://crates.io/crates/argh) 等。
依赖关系
~2MB