도움말 및 버전에 대한 짧은 옵션없이 긴 옵션 포함

스냅 슈

짧은 옵션이 없는 긴 옵션 을 포함 --help하고 싶습니다 . 이것이 가능한가?--version-h-V

나는 yaml과 함께 박수를 사용하고 있습니다. 내가 생각 해낼 수 있었던 가장 가까운 것은 짧은 옵션을 가리는 숨겨진 (사용되지 않은) 인수를 사용하는 것입니다.

# main.rs
use clap::{load_yaml, App};
fn main() {
  let y = load_yaml!("cli.yaml");
  let m = App::from_yaml(y).get_matches();
  println!("_help {}", m.is_present("_help"));
  println!("_version {}", m.is_present("_version"));
}
# Cargo.toml
[package]
name = "app"
version = "0.0.1"
edition = "2018"

[dependencies]
clap = {version = "~2.33.0", features = ["yaml"]}
# cli.yaml
name: app
version: 0.0.1
args:
  - opt: { short: "o", long: "opt" }
  - _help: { short: "h", hidden: true }
  - _version: { short: "V", hidden: true }
$ cargo -q run -- --help
app 0.0.1

USAGE:
    app [FLAGS]

FLAGS:
        --help       Prints help information
    -o, --opt        
        --version    Prints version information

$ cargo -q run -- -h    
_help true
_version false
$ cargo -q run -- -o
_help false
_version false
$ cargo -q run -- -V
_help false
_version true
$ cargo -q run -- -x
error: Found argument '-x' which wasn't expected, or isn't valid in this context

USAGE:
    app [FLAGS]

For more information try --help

이것은 매우 깨끗한 접근 방식처럼 느껴지지 않습니다. 다른 / 더 나은 방법이 있습니까?

발렌틴

Clap은 args 파서를 만들기 위해 더 설계되었습니다. 따라서 기존 인수를 가져오고 제거하는 기능은 그다지 많지 않습니다.

"-h"예를 들어 단순히 이름을 바꾸려면 "-?"다음을 사용하여 수행 할 수 있습니다 help_short("-?")(참조 version_short()).

그러나이를 해결하는 방법이 있습니다.


예를 들어 사용하고 있다고 가정합니다 clap = "2.33". 그런 다음 이미 수행중인 작업과 유사하게 helpversionargs를 재정의 / 바꾸고 그런 방식으로 짧은 버전을 "제거"할 수 있습니다. (간결성을 위해에 대한 예제 만 포함하겠습니다 help.)

물론 cli.yaml원하는 경우 보관할 수 있지만에 추가하겠습니다 main.rs. 간단히 말해, 새 "help"인수 를 추가 하고 long버전 만 제공하려고합니다 . help("Prints help information")기존 help인수를 대체하므로 포함하는 것이 중요 하므로, 그렇지 않으면에 대한 기본 도움말 메시지가 표시되지 않습니다 --help.

오버 링의 단점 "help"print_help()스스로 처리해야한다는 것입니다.

use clap::{load_yaml, App, Arg};

fn main() {
    let y = load_yaml!("cli.yaml");
    let mut app = App::from_yaml(y)
        .arg(
            Arg::with_name("help")
                .long("help")
                .help("Prints help information"),
        );

    let m = app.clone().get_matches();

    if m.is_present("help") {
        app.print_help().unwrap();
        // std::process::exit(0);
        // or just
        return;
    }
}

그러나 사용하는 경우 clap = "3.0.0-beta.2"의 도입으로 다음 단순화 것들, 그 mut_arg(). 그 수 있기 때문에 우리는 돌연변이 인수를. 따라서 우리는 더 이상 자신 을 부를 필요가 없습니다 .print_help()

use clap::{load_yaml, App, Arg};

fn main() {
    let y = load_yaml!("cli.yaml");
    let m = App::from(y)
        .mut_arg("help", |h| {
            Arg::new("help")
                .long("help")
                .about("Prints help information")
        })
        .get_matches();
}

참고 App::from_yaml()지금 App::from()동안 Arg::with_name()이되었다 Arg::new(), 그리고 help()지금이다 about().

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

bash 색상 및 긴 줄에 대한 도움말

분류에서Dev

유효하지 않은 긴 옵션에 대한 Segfault

분류에서Dev

특정 명령 옵션에 대한 도움말을 얻는 방법

분류에서Dev

명령 줄 옵션에 대해 짧고 긴 대안이있는 이유는 무엇입니까?

분류에서Dev

포함 옵션에 대한 F # 데이터 형식

분류에서Dev

더 긴 옵션 문자열에 대해 어떤 옵션이 있습니까?

분류에서Dev

긴 옵션의 ZSH 완성은 짧은 옵션을 제공합니다

분류에서Dev

Redux 및 ReactHooks에 대한 작은 도움말

분류에서Dev

최신 버전의 PHP에서 mysql_real_escape_string () 함수에 대한 옵션은 무엇입니까?

분류에서Dev

Ruby 간단한 도움말 옵션 구현

분류에서Dev

내 LVM 파티션 크기 조정에 대한 도움말

분류에서Dev

파티션 크기 증가에 대한 도움말

분류에서Dev

Azure Cloud Service에 대한 업데이트 및 만들기 및 삭제 배포 옵션의 차이점

분류에서Dev

함수 포인터에 대한 gfortran -fc-prototypes 옵션

분류에서Dev

Nvidia 드라이버 설치 및 --kernel-source-path에 대한 도움말

분류에서Dev

WebView에 대한 추적 안 함 옵션

분류에서Dev

Kate 플러그인에 "외부 도구"에 대한 옵션이 없습니다.

분류에서Dev

도움말 옵션이 --help이지만 일부 명령에서 -h가없는 이유는 무엇입니까?

분류에서Dev

HTML에 옵션 포함

분류에서Dev

Selectpicker 비활성화 옵션에 제목 (도움말)을 추가하는 방법은 무엇입니까?

분류에서Dev

UIContainerView에 버튼에 대한 IBAction 옵션이 없습니까?

분류에서Dev

전원 옵션에 Windows 8 최대 절전 모드 옵션이 없음

분류에서Dev

Gridview에 저장 및 표시하는 세션 도움말

분류에서Dev

Index.php에 대한 PHP 동적 포함 도움말?

분류에서Dev

두 개의 다른 패키지에서 이름이 같은 두 함수에 대한 도움말보기

분류에서Dev

li와 함께 ul에 대한 옵션이있는 optgroup

분류에서Dev

문서화되지 않은 적절한 긴 옵션이 있습니까?

분류에서Dev

스토리 보드에 segue 포함 옵션이 없습니다.

분류에서Dev

Indy SNMP 트랩에 대한 버전 옵션이 있습니까?

Related 관련 기사

  1. 1

    bash 색상 및 긴 줄에 대한 도움말

  2. 2

    유효하지 않은 긴 옵션에 대한 Segfault

  3. 3

    특정 명령 옵션에 대한 도움말을 얻는 방법

  4. 4

    명령 줄 옵션에 대해 짧고 긴 대안이있는 이유는 무엇입니까?

  5. 5

    포함 옵션에 대한 F # 데이터 형식

  6. 6

    더 긴 옵션 문자열에 대해 어떤 옵션이 있습니까?

  7. 7

    긴 옵션의 ZSH 완성은 짧은 옵션을 제공합니다

  8. 8

    Redux 및 ReactHooks에 대한 작은 도움말

  9. 9

    최신 버전의 PHP에서 mysql_real_escape_string () 함수에 대한 옵션은 무엇입니까?

  10. 10

    Ruby 간단한 도움말 옵션 구현

  11. 11

    내 LVM 파티션 크기 조정에 대한 도움말

  12. 12

    파티션 크기 증가에 대한 도움말

  13. 13

    Azure Cloud Service에 대한 업데이트 및 만들기 및 삭제 배포 옵션의 차이점

  14. 14

    함수 포인터에 대한 gfortran -fc-prototypes 옵션

  15. 15

    Nvidia 드라이버 설치 및 --kernel-source-path에 대한 도움말

  16. 16

    WebView에 대한 추적 안 함 옵션

  17. 17

    Kate 플러그인에 "외부 도구"에 대한 옵션이 없습니다.

  18. 18

    도움말 옵션이 --help이지만 일부 명령에서 -h가없는 이유는 무엇입니까?

  19. 19

    HTML에 옵션 포함

  20. 20

    Selectpicker 비활성화 옵션에 제목 (도움말)을 추가하는 방법은 무엇입니까?

  21. 21

    UIContainerView에 버튼에 대한 IBAction 옵션이 없습니까?

  22. 22

    전원 옵션에 Windows 8 최대 절전 모드 옵션이 없음

  23. 23

    Gridview에 저장 및 표시하는 세션 도움말

  24. 24

    Index.php에 대한 PHP 동적 포함 도움말?

  25. 25

    두 개의 다른 패키지에서 이름이 같은 두 함수에 대한 도움말보기

  26. 26

    li와 함께 ul에 대한 옵션이있는 optgroup

  27. 27

    문서화되지 않은 적절한 긴 옵션이 있습니까?

  28. 28

    스토리 보드에 segue 포함 옵션이 없습니다.

  29. 29

    Indy SNMP 트랩에 대한 버전 옵션이 있습니까?

뜨겁다태그

보관