[파이썬 100강] 30강. argparse로 실전 CLI 도구 만들기

[파이썬 100강] 30강. argparse로 실전 CLI 도구 만들기

30강에서는 argparse로 재사용 가능한 커맨드라인 도구를 만듭니다. 지금까지 배운 파일 처리, 예외 처리, 로깅을 하나로 합치는 단계입니다.

핵심 개념

  • argparse.ArgumentParser: CLI 인터페이스 정의
  • 옵션/필수 인자 분리
  • --dry-run 같은 안전 옵션 제공

기본 사용법

>>> import argparse
>>> parser = argparse.ArgumentParser(prog='linecount')
>>> parser.add_argument('path')
>>> parser.add_argument('--min', type=int, default=1)
>>> args = parser.parse_args(['sample.txt', '--min', '3'])
>>> args.path, args.min
('sample.txt', 3)

미니 도구 예시(개념):

$ python linecount.py sample.txt --min 2
총 라인 수: 5
조건(길이 >= 2) 만족 라인 수: 4

예외 처리 포함:

$ python linecount.py missing.txt
[ERROR] 파일을 찾을 수 없습니다: missing.txt

자주 하는 실수

  1. 인자 이름/도움말을 부실하게 작성해 사용성이 낮아짐
  2. 입력 검증 없이 바로 파일 처리
  3. 실패 시 종료 코드를 명확히 주지 않음

오늘의 결론

CLI 도구는 자동화의 시작점입니다. 사용법이 명확한 작은 도구 하나가 팀 생산성을 크게 높입니다. 1~30강의 내용을 충분히 실무에 적용할 수 있습니다.

연습문제(3개)

  1. 파일 경로를 받아 줄 수를 세는 CLI를 작성하세요.
  2. --contains 옵션으로 특정 문자열 포함 줄만 세어보세요.
  3. --dry-run 옵션에서 실제 파일 변경 없이 계획만 출력하게 하세요.

이전 강의 정답(29강)

>>> import logging
>>> logging.basicConfig(level=logging.INFO, format='%(levelname)s:%(message)s')
>>> logging.info('start')
INFO:start
>>> logging.warning('disk low')
WARNING:disk low
>>> logging.error('failed')
ERROR:failed
>>> logger = logging.getLogger('app')
>>> handler = logging.FileHandler('app.log', encoding='utf-8')
>>> handler.setFormatter(logging.Formatter('%(levelname)s:%(message)s'))
>>> logger.addHandler(handler)
>>> logger.setLevel(logging.INFO)
>>> logger.info('file logging enabled')
>>> try:
...     int('x')
... except ValueError:
...     logging.exception('숫자 파싱 실패')
...
ERROR:root:숫자 파싱 실패
Traceback (most recent call last):
  ...
ValueError: invalid literal for int() with base 10: 'x'

실습 환경/재현 정보

  • 실행 환경: conda env python100 (Python 3.11.14)

심화 노트 (실무 확장)

  • argparse CLI는 옵션 기본값/검증/도움말을 촘촘히 설계할수록 사용자 오류가 줄어듭니다.
  • 명령(subcommand) 구조를 도입하면 도구가 커져도 인터페이스가 깔끔하게 유지됩니다.
  • 종료 코드(0/비0) 규칙을 명확히 해야 자동화 파이프라인과 안정적으로 연동됩니다.

보너스 연습문제 (퀄리티 업)

  1. 이번 강의의 핵심 개념을 적용해 입력 검증 → 처리 → 결과 요약 3단계 흐름으로 미니 스크립트를 작성해보세요.
  2. 실패/예외 상황 2가지를 의도적으로 만들고, 사용자 메시지와 로그 메시지를 분리해 출력해보세요.
  3. 같은 문제를 두 가지 방식(단순 구현 vs 개선 구현)으로 작성한 뒤, 가독성/유지보수성 차이를 비교해보세요.

체크리스트

  • [ ] 핵심 개념을 실제 데이터/입력에 적용해봤다.
  • [ ] 실패 케이스를 최소 1개 이상 직접 재현해봤다.
  • [ ] 코드에 재사용 가능한 함수(또는 클래스) 경계를 만들었다.