第一次玩 Rusts clap crate。我想知道当命令行未指定选项时如何使用命令行选项的默认值。
鉴于我default_value在 yaml 文件中指定了 a(请参见下面的代码片段),matches.value_of("VERBOSE")如果命令行中没有给出其他值,我希望返回默认值。
相反,我得到:
Option::unwrap()线程“main”因“调用值”而惊慌失措None,src/main.rs:18:6
我在谷歌上搜索了一段时间,但似乎没有人真正给出一个规范的例子来说明它应该如何工作。
...
args:
- config:
short: c
long: config
value_name: CONFIG
help: Specifies the config file to use.
takes_value: true
default_value: ""
- verbose:
short: v
long: verbose
value_name: VERBOSE
help: Sets verbosity. 0 = silent, > 0 = verbose.
takes_value: true
default_value: "1"
Run Code Online (Sandbox Code Playgroud)
在这里,我无力的尝试......编译但不起作用(如果使用空命令行会出现恐慌)。
// ...
let yaml = load_yaml!("cli.yml");
let matches = App::from_yaml(yaml).get_matches();
let verbosity =
matches.value_of("VERBOSE")
.and_then(|s| s.parse::<u8>().ok())
.unwrap();
Run Code Online (Sandbox Code Playgroud)
由于这显然不使用默认值,我的简单问题是:我该如何做?
问题是您要么对参数名称value_name(仅用于 CLI 帮助选项)有一个小误解,要么您错过了参数名称区分大小写。
您有两种选择可以使其按预期工作:
yaml:
...
args:
- config:
short: c
long: config
value_name: CONFIG
help: Specifies the config file to use.
takes_value: true
default_value: "1"
- verbose:
short: v
long: verbose
value_name: VERBOSE
help: Sets verbosity. 0 = silent, > 0 = verbose.
takes_value: true
default_value: "1"
Run Code Online (Sandbox Code Playgroud)
锈:
use clap::{load_yaml, App};
fn main() {
let yaml = load_yaml!("cli.yml");
let matches = App::from_yaml(yaml).get_matches();
let verbosity =
matches.value_of("verbose")
.and_then(|s| s.parse::<u8>().ok())
.unwrap();
println!("{}", verbosity);
}
Run Code Online (Sandbox Code Playgroud)
...
args:
- config:
short: c
long: config
value_name: CONFIG
help: Specifies the config file to use.
takes_value: true
default_value: "1"
- VERBOSE:
short: v
long: verbose
value_name: VERBOSE
help: Sets verbosity. 0 = silent, > 0 = verbose.
takes_value: true
default_value: "1"
Run Code Online (Sandbox Code Playgroud)
锈
use clap::{load_yaml, App};
fn main() {
let yaml = load_yaml!("cli.yml");
let matches = App::from_yaml(yaml).get_matches();
let verbosity =
matches.value_of("VERBOSE")
.and_then(|s| s.parse::<u8>().ok())
.unwrap();
println!("{}", verbosity);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12667 次 |
| 最近记录: |