수색…
소개
Rust의 표준 라이브러리에는 적절한 인수 파서 (Python의
argparse
와는 달리)가 포함되어 있지 않으며 대신 타사 상자에 남겨 두는 것을 선호합니다. 이 예제는 표준 라이브러리 (원시 인수 핸들러를 형성하기 위해)와 명령 행 인수를 더 효과적으로 구문 분석 할 수있는 clap
라이브러리의 사용법을 보여줍니다.
통사론
- 표준을 사용하십시오 :: env; // env 모듈 가져 오기
- let args = env :: args (); // Args 반복자를 args 변수에 저장합니다.
std :: env :: args () 사용하기
std::env::args()
함수를 사용하여 프로그램에 전달 된 명령 줄 인수에 액세스 할 수 있습니다. 루프를 반복하거나 Vec
수집 할 수있는 Args
반복자를 반환합니다.
인수를 반복하다
use std::env;
fn main() {
for argument in env::args() {
if argument == "--help" {
println!("You passed --help as one of the arguments!");
}
}
}
Vec
모으기
use std::env;
fn main() {
let arguments: Vec<String> = env::args().collect();
println!("{} arguments passed", arguments.len());
}
다음과 같이 프로그램을 호출하면 예상보다 많은 인수가 발생할 수 있습니다.
./example
인수가 전달되지 않은 것처럼 보이지만 첫 번째 인수는 ( 일반적으로 ) 실행 파일의 이름입니다. 이것은 보증은 아니므로 항상 인수의 유효성을 검사하고 필터링해야합니다.
박수 소리 사용하기
커다란 명령 행 프로그램의 경우 std::env::args()
것은 매우 지루하고 관리하기 어렵습니다. clap
을 사용하여 명령 줄 인터페이스를 처리 할 수 있습니다.이 인터페이스는 인수를 구문 분석하고 도움말 디스플레이를 생성하며 버그를 방지합니다.
clap
와 함께 사용할 수있는 패턴 이 여러 가지 있으며, 각각 다른 패턴 의 유연성을 제공합니다.
작성자 패턴
이것은 가장 장황하고 유연한 방법이므로 CLI를 세밀하게 제어해야 할 때 유용합니다.
clap
은 부속 명령 과 인수를 구별합니다. 하위 명령은 cargo run
및 git push
와 마찬가지로 주 프로그램에서 독립적 인 서브 프로그램처럼 작동합니다. 그들은 자신의 명령 행 옵션과 입력을 가질 수 있습니다. 인수는 --verbose
와 같은 간단한 플래그이며 입력을받을 수 있습니다 (예 : - --message "Hello, world"
).
extern crate clap;
use clap::{Arg, App, SubCommand};
fn main() {
let app = App::new("Foo Server")
.about("Serves foos to the world!")
.version("v0.1.0")
.author("Foo (@Example on GitHub)")
.subcommand(SubCommand::with_name("run")
.about("Runs the Foo Server")
.arg(Arg::with_name("debug")
.short("D")
.about("Sends debug foos instead of normal foos.")))
// This parses the command-line arguments for use.
let matches = app.get_matches();
// We can get the subcommand used with matches.subcommand(), which
// returns a tuple of (&str, Option<ArgMatches>) where the &str
// is the name of the subcommand, and the ArgMatches is an
// ArgMatches struct:
// https://docs.rs/clap/2.13.0/clap/struct.ArgMatches.html
if let ("run", Some(run_matches)) = app.subcommand() {
println!("Run was used!");
}
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow