0

我遇到了与没有提供命令时 Clap 有什么直接的方法来显示帮助的问题吗?,但该问题中提出的解决方案对我来说还不够好。

.setting(AppSettings::ArgRequiredElseHelp)如果没有提供参数,则停止程序,即使没有提供参数,我也需要程序继续执行。我需要另外显示帮助。

4

1 回答 1

3

你可以先写字符串。

use clap::{App, SubCommand};

use std::str;

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 mut help = Vec::new();
    app.write_long_help(&mut help).unwrap();

    let _ = app.get_matches();

    println!("{}", str::from_utf8(&help).unwrap());
}

或者你可以使用get_matches_safe

use clap::{App, AppSettings, ErrorKind, SubCommand};

fn main() {
    let app = App::new("myapp")
        .setting(AppSettings::ArgRequiredElseHelp)
        .version("0.0.1")
        .about("My first CLI APP")
        .subcommand(SubCommand::with_name("ls").about("List anything"));

    let matches = app.get_matches_safe();

    match matches {
        Err(e) => {
            if e.kind == ErrorKind::MissingArgumentOrSubcommand {
                println!("{}", e.message)
            }
        }
        _ => (),
    }
}
于 2019-02-23T01:27:42.217 回答