OptionParser — 명령줄 인자 파싱

OptionParser — 명령줄 인자 파싱

터미널에서 명령을 실행할 때 --debug 같은 옵션을 붙여 동작을 바꾸곤 해요. 그런 명령줄 인자(command line arguments)를 파싱하는 함수들이 OptionParser 모듈에 모여 있어요.

출처: OptionParser

본문

명령을 호출할 때 명령이 하는 일을 바꾸기 위해 명령줄 옵션을 넘길 수 있어요. 이 문서에서는 그런 옵션을 "스위치(switch)"라고 불러요. 상황에 따라 "플래그(flag)"나 그냥 "옵션(option)"이라고 부르는 곳도 있죠. 스위치에는 값을 줄 수도 있는데, 그 값을 "인자(argument)"라고 해요.

이 모듈의 핵심 함수는 parse/2예요. 명령줄 옵션과 인자 리스트를 **키워드 리스트(keyword list)**로 파싱해 주죠:

iex> OptionParser.parse(["--debug"], strict: [debug: :boolean])
{[debug: true], [], []}

OptionParser는 별도 설정 없이도 편의 기능을 몇 가지 제공해요. alias(별칭) 처리와 부정(negation) 스위치 자동 처리가 대표적이에요. 예를 들어 --no-cache 같은 형태를 자동으로 다뤄 주죠.

parse_head/2parse/2의 대안이에요. 스위치도 아니고 이전 스위치의 값도 아닌 값을 만나면 거기서 파싱을 멈추는 함수예요. 명령줄에서 옵션과 인자가 섞여 있을 때, 옵션 부분만 먼저 떼어 내고 싶을 때 유용해요.

이 모듈은 저수준 함수도 제공해요. next/2는 스위치를 수동으로 파싱할 때 쓰고, split/1to_argv/1은 문자열에서 파싱하거나 스위치를 다시 문자열로 바꿀 때 사용해요. CLI 도구를 직접 만들고 있다면 strict 옵션으로 각 스위치의 타입(:boolean, :integer, :string 등)을 지정해 예상치 못한 값이 들어오는 걸 막을 수 있어요.

더 알아보기

  • OptionParser.parse/2, OptionParser.parse_head/2 — 주요 파싱 함수
  • OptionParser.ParseError — 파싱 실패 시 발생하는 예외
  • OptionParser.parse!/2 — 실패 시 예외를 던지는 강제 버전
  • CLI 도구 만들기: Mixmix.task 가이드