当没有提供命令时,Clap 有什么直接的方法来显示帮助吗?
Is there any straightforward way for Clap to display help when no command is provided?
我正在使用 the Clap crate 来解析命令行参数。我已经定义了一个应该列出文件的子命令 ls
。 Clap 还定义了一个 help
子命令,用于显示有关应用程序及其用法的信息。
如果没有提供命令,则根本不会显示任何内容,但我希望应用程序在这种情况下显示帮助。
我试过这段代码,它看起来很简单,但它不起作用:
extern crate clap;
use clap::{App, SubCommand};
fn main() {
let mut app = App::new("myapp")
.version("0.0.1")
.about("My first CLI APP")
.subcommand(SubCommand::with_name("ls").about("List anything"));
let matches = app.get_matches();
if let Some(cmd) = matches.subcommand_name() {
match cmd {
"ls" => println!("List something here"),
_ => eprintln!("unknown command"),
}
} else {
app.print_long_help();
}
}
我得到一个错误,在移动后使用 app
:
error[E0382]: use of moved value: `app`
--> src/main.rs:18:9
|
10 | let matches = app.get_matches();
| --- value moved here
...
18 | app.print_long_help();
| ^^^ value used here after move
|
= note: move occurs because `app` has type `clap::App<'_, '_>`, which does not implement the `Copy` trait
通读 Clap 的文档,我发现 get_matches()
中返回的 clap::ArgMatches
有一个方法 usage
returns 用法部分的字符串, 但不幸的是,只有这一部分,没有别的。
使用clap::AppSettings::ArgRequiredElseHelp
:
App::new("myprog")
.setting(AppSettings::ArgRequiredElseHelp)
另请参阅:
您还可以在命令本身上使用 Command::arg_required_else_help
作为 bool
。
Command::new("rule").arg_required_else_help(true)
我正在使用 the Clap crate 来解析命令行参数。我已经定义了一个应该列出文件的子命令 ls
。 Clap 还定义了一个 help
子命令,用于显示有关应用程序及其用法的信息。
如果没有提供命令,则根本不会显示任何内容,但我希望应用程序在这种情况下显示帮助。
我试过这段代码,它看起来很简单,但它不起作用:
extern crate clap;
use clap::{App, SubCommand};
fn main() {
let mut app = App::new("myapp")
.version("0.0.1")
.about("My first CLI APP")
.subcommand(SubCommand::with_name("ls").about("List anything"));
let matches = app.get_matches();
if let Some(cmd) = matches.subcommand_name() {
match cmd {
"ls" => println!("List something here"),
_ => eprintln!("unknown command"),
}
} else {
app.print_long_help();
}
}
我得到一个错误,在移动后使用 app
:
error[E0382]: use of moved value: `app`
--> src/main.rs:18:9
|
10 | let matches = app.get_matches();
| --- value moved here
...
18 | app.print_long_help();
| ^^^ value used here after move
|
= note: move occurs because `app` has type `clap::App<'_, '_>`, which does not implement the `Copy` trait
通读 Clap 的文档,我发现 get_matches()
中返回的 clap::ArgMatches
有一个方法 usage
returns 用法部分的字符串, 但不幸的是,只有这一部分,没有别的。
使用clap::AppSettings::ArgRequiredElseHelp
:
App::new("myprog")
.setting(AppSettings::ArgRequiredElseHelp)
另请参阅:
您还可以在命令本身上使用 Command::arg_required_else_help
作为 bool
。
Command::new("rule").arg_required_else_help(true)