및 짧은 옵션이 없는 긴 옵션 을 포함 --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"
. 그런 다음 이미 수행중인 작업과 유사하게 help
및 version
args를 재정의 / 바꾸고 그런 방식으로 짧은 버전을 "제거"할 수 있습니다. (간결성을 위해에 대한 예제 만 포함하겠습니다 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] 삭제
몇 마디 만하겠습니다