수색…


소개

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 rungit 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