Как вывести справку после вызова get_matches Клэпа? - PullRequest
0 голосов
/ 23 февраля 2019

У меня та же проблема, что и Есть ли у Клэпа простой способ отобразить справку, если не указана команда? , но решение, предложенное в этом вопросе, мне не подходит.

.setting(AppSettings::ArgRequiredElseHelp) останавливает программу, если аргументы не предоставлены, и мне нужно, чтобы программа продолжила выполнение, даже если аргументы не предоставлены.Мне нужна помощь, чтобы отображаться дополнительно.

1 Ответ

0 голосов
/ 23 февраля 2019

Вы можете написать строку раньше.

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)
            }
        }
        _ => (),
    }
}
...