Rust 명령줄의 인수 받기
2023. 6. 18. 23:40ㆍLanguage/Rust
개요
Rust는 Command Line에 즉 CLI 도구에 많이 사용 됩니다.
그래서 오늘은 Command Line에서 인수를 받는 방법에 대해 알아보도록 하겠습니다.
표준 라이브러리 인수 다루기
Rust의 표준 라이브러리인 std::env::args()
를 통해 Rust 프로그램의 인수를 가져 올 수 있습니다.
fn main() {
let args = std::env::args();
for (i, s) in args.enumerate(){
println!("{}", s);
}
}
$ cargo run 10 20 30 a b c 1.1 1.2
10
20
30
a
b
c
1.1
1.2
인수의 경우는 전부 string으로 받게 됩니다.
Clap 크래이트 사용하기
CLI를 사용하기 위해서는 표준 라이브러리 만으로 인수를 다루기에는 어려울 수 있습니다.
예를 들어 $ ls -al
, $ls -a -l
이런 식으로 복잡한 인수들도 있기 때문입니다.
이럴때 도와주는 서드 파티 라이브러리가 Clap입니다.
$ cargo add clap --features derive
패키지를 추가해 줍니다. 그리고 main.rs를 작성합니다.
use clap::Parser;
/// Simple program to greet a person
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
/// Name of the person to greet
#[arg(short, long)]
name: String,
/// Number of times to greet
#[arg(short, long, default_value_t = 1)]
count: u8,
}
fn main() {
let args = Args::parse();
for _ in 0..args.count {
println!("Hello {}!", args.name)
}
}
#[command(author, version, about, long_about = None)]
의 의미는 아래와 같습니다.
- author: 이 프로그램에서 작성한 작성자에 대한 정보를 포함합니다.
- version: 이 프로그램의 버전 번호를 나타냅니다.
- about: 이 프로그램이 무엇에 대해 작동하는지에 대한 간단한 설명을 제공합니다.
- long_about: 이 프로그램에 대한 상세한 설명을 포함하는 파일의 경로를 나타냅니다. None으로 설정하면 무시됩니다.
#[arg(short, long)]
의 의미는 name 옵션을 사용 할 때 짧은 옵션(-n) 긴 옵션 (--name) 둘다 사용 한다는 뜻입니다.
그리고 default_value_t = 1
의 의미는 옵션이 없으면 기본 값이 1이라는 뜻입니다.
실행해보기
위에서 만든 프로그램을 실행 해보도록 하겠습니다. 명령 인자를 받기 위해서는 먼저 릴리즈를 해야합니다.
$ cargo build -r
target 폴더에 exe 파일이 생긴 것을 확인 할 수 있습니다.
> .\target\release\command-line.exe -h
Simple program to greet a person
Usage: command-line.exe [OPTIONS] --name <NAME>
Options:
-n, --name <NAME> Name of the person to greet
-c, --count <COUNT> Number of times to greet [default: 1]
-h, --help Print help
-V, --version Print version
실행 시켜서 -h 옵션으로 -help를 하면 위에서 정의 한 옵션들이 나오게 됩니다.
> .\target\release\command-line.exe -n bak -c 5
Hello bak!
Hello bak!
Hello bak!
Hello bak!
Hello bak!
'Language > Rust' 카테고리의 다른 글
cargo diesel_cli 설치 에러 (0) | 2023.06.22 |
---|---|
환경변수 파일 읽기 (0) | 2023.06.21 |
Rust의 HashMap 소개 (1) | 2023.06.15 |
Rust Shuffle (0) | 2023.06.11 |
Rust fmt 모듈 (0) | 2023.06.07 |