15个版本 (稳定版)
3.1.3 | 2023年7月1日 |
---|---|
2.0.3 | 2022年7月16日 |
2.0.2 | 2022年4月15日 |
2.0.1 | 2022年3月24日 |
0.0.3 | 2022年3月12日 |
#94 在 命令行接口
每月 90 次下载
用于 sssg
28KB
158 行
Clappers
命令行参数解析特别简单,相对直接!
Clappers
旨在成为银河系中最易用的命令行参数解析器。您可以通过链式调用配置Clappers
解析器,其中最后一个链接是对build()
的调用。然后通过Clappers
解析器的getter获取命令行参数值。
示例1 - 最基本的目录列表
use clappers::Clappers;
fn main() {
let clappers = Clappers::new()
.set_flags(vec![
"h|help",
"l",
"R|recursive",
])
.build();
if clappers.get_flag("help") {
println!("
usage: ls [arguments] [FILE1]...
Arguments:
-h|--help Print this help
-l Use a long listing format
-R|--recursive List subdirectories recursively
");
}
if clappers.get_flag("l") {
// Show more details than usual
}
if clappers.get_flag("R") {
// Recurse into subdirectories
}
if clappers.get_flag("recursive") {
// This will also recurse
}
let filenames: Vec<String> = clappers.get_leftovers();
// ...
}
示例2 - 最基本的编译器
use clappers::Clappers;
fn main() {
let clappers = Clappers::new()
.set_flags(vec![
"h|help",
"v|verbose",
])
.set_singles(vec![
"o|output",
])
.set_multiples(vec![
"i|input",
"I",
"L",
])
.build();
if clappers.get_flag("help") {
println!("
usage: compile [arguments]
Arguments:
-h|--help Print this help
-v|--verbose Enable verbose mode
-I <dir1> ... <dirN> Include directories
-L <dir1> ... <dirN> Library directories
-i|--input <file1> ... <fileN> Input filenames
-o|--output filename Output filename
");
}
let output_filename = clappers.get_single("output");
let input_filenames: Vec<String> = clappers.get_multiple("input");
// ...
}
参数类型
有四种类型的参数
- 标志
- 单值
- 多值
- 剩余
1. 标志参数
如果标志参数在命令行中提供,则为true
,否则为false
,例如
-h
--help
-v
--verbose
注意:标志参数不接受值
2. 单值参数
如果单值参数在命令行中提供,则包含一个String
值,否则为空String
,例如
-o filename.txt
--output filename.txt
-u Zelensky
--username Zelensky
3. 多值参数
如果多值参数在命令行中提供,则至少包含一个String
值,否则为空String
,例如
-i file1.txt
--input file1.txt
--host host1
它们也可以包含多个值,通过在命令行中重复来重复,例如
-i file1.txt -i file2.txt ... -i fileN.txt
--host host1 --host host2 ... --host hostN
以下格式也有效,从第一个值开始读取,直到遇到下一个参数或直到整个命令行参数的末尾,例如
-i file1.txt file2.txt ... fileN.txt -n next_argument
--host host1 host2 hostN
4. 剩余参数
剩余参数值是指命令行中提供的未与任何参数关联的值。这包括
- 当未提供其他参数类型时,任何值
ls file1 file2... fileN
- 双破折号参数之后的任何值
ls -l -R -- file1 file2... fileN`
-
提供给标志的任何值,因为标志不接受值
-
提供给单值参数的任何剩余值,因为这些参数只接受一个值
注意事项
- 组合标志目前不支持,即以下内容无法工作:
tar -zcf filename.tar.gz *
- 等于值目前不支持,即以下内容无法工作:
tar -zc --file=filename.tar.gz
- 具有独立解析器(
Clappers
)的命令目前不支持,即以下内容无法工作:
apt-get -y install -f cargo
apt-get update -f
- 命令行参数值始终为
String
类型。这是设计的一部分,没有计划提供便利函数。要将String
转换为其他类型,请使用String
的内置parse()
函数。
use clappers::Clappers;
fn main() {
let clappers = Clappers::new()
.set_singles(vec!["number"])
.build();
let number: i32 = clappers.get_single("number").parse().unwrap();
println!("Double {number} is {}", number * 2);
}
支持
请将任何错误报告或功能请求提交到:
请随意分支存储库并提交拉取请求 :)
荣耀属于乌克兰!
作者
Alfie John <[email protected]>
保修
本产品不提供任何类型的保修。
版权和许可
版权(C)2022 由Alfie John所有。
本程序是自由软件:您可以根据自由软件基金会发布的GNU通用公共许可证和GNU自由文档许可证的条款重新分发和/或修改它,无论是GPL的第3版还是GFDL的第1.3版,或者是您选择的任何后续版本。
本程序的分发是希望它是有用的,但没有提供任何保证;甚至没有对适销性和针对特定用途的适用性的暗示保证。有关详细信息,请参阅GNU通用公共许可证。
您应该已随本程序收到GNU通用公共许可证的副本。如果没有,请参阅https://www.gnu.org/licenses/。