콘솔 명령 처리

콘솔 명령 처리

Command Line 아규먼트

Rust에서 Command Line 아규먼트를 읽어 들이기 위해서는 표준 라이브러리의 std::env::args() 함수를 사용한다. std::env::args() 함수는 Iterator를 리턴하는데, 이를 모두 읽어 문자열 벡터로 바꾸기 위해 collect() 메서드를 사용하였다. 아래 예제에서 collect() 메서드는 벡터나 해시맵 등 여러 타입을 리턴할 수 있으므로, 변수 args의 구제척인 타입(즉, Vec<String>)을 지정하였다.

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    // println!("{:?}", args);
    
    if args.len() < 3 {
        println!("not enough args");
        return;
    }    

    let arg1: String = args[1].clone();
    let arg2: String = args[2].clone();
    println!("{}, {}", arg1, arg2);
}

Rust에서 Command Line Argument의 첫번째 아규먼트는 항상 실행 파일명(경로 포함)이고, 두번째 아규먼트가 콘솔에서 실제 전달하고자 하는 첫번재 아규먼트이다. 따라서, 위의 args[1]은 실제로는 콘솔의 첫번째 아규먼트가 된다.

환경 변수 (environment variable)

Rust에서 환경 변수 (environment variable)를 읽기 위해서는 std::env::var() 함수를 사용한다. 이 var() 함수는 Result<String, VarError> 타입을 리턴한다.

아래 예제는 "FLAG"라는 환경 변수를 체크해서 그 환경변수가 있으면 그 값을 출력하고, 없으면 not found 메시지를 출력하고 있다. 참고로, is_ok() 메서드는 환경변수를 발견 했을때 true를 리턴하고, 반대로 is_err() 메서드는 환경변수가 없을 때 true를 리턴한다.

use std::env;

fn main() {    
    let flag = env::var("FLAG");
    // println!("{:?}", flag);

    if flag.is_ok() {
        println!("{}", flag.unwrap());
    } else {
        println!("FLAG not found");
    }
}

stdout과 stderr 출력

콘솔 출력은 크게 표준출력(stdout)과 표준에러(stderr) 출력으로 나누어 진다. Rust에서 stdout 출력은 일반적으로 println!() 과 같은 매크로를 사용하고, stderr 출력은 eprintln!() 매크로를 사용한다.

fn main() {
    println!("Here is your output");  //stdout
    eprintln!("Here is your output"); //stderr
}

This site is not affiliated with or endorsed by the Rust Foundation or Rust Project.