[파이썬 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
자주 하는 실수
- 인자 이름/도움말을 부실하게 작성해 사용성이 낮아짐
- 입력 검증 없이 바로 파일 처리
- 실패 시 종료 코드를 명확히 주지 않음
오늘의 결론
CLI 도구는 자동화의 시작점입니다. 사용법이 명확한 작은 도구 하나가 팀 생산성을 크게 높입니다. 1~30강의 내용을 충분히 실무에 적용할 수 있습니다.
연습문제(3개)
- 파일 경로를 받아 줄 수를 세는 CLI를 작성하세요.
--contains옵션으로 특정 문자열 포함 줄만 세어보세요.--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'
실습 환경/재현 정보
- 실행 환경:
condaenvpython100(Python 3.11.14)
심화 노트 (실무 확장)
- argparse CLI는 옵션 기본값/검증/도움말을 촘촘히 설계할수록 사용자 오류가 줄어듭니다.
- 명령(subcommand) 구조를 도입하면 도구가 커져도 인터페이스가 깔끔하게 유지됩니다.
- 종료 코드(0/비0) 규칙을 명확히 해야 자동화 파이프라인과 안정적으로 연동됩니다.
보너스 연습문제 (퀄리티 업)
- 이번 강의의 핵심 개념을 적용해 입력 검증 → 처리 → 결과 요약 3단계 흐름으로 미니 스크립트를 작성해보세요.
- 실패/예외 상황 2가지를 의도적으로 만들고, 사용자 메시지와 로그 메시지를 분리해 출력해보세요.
- 같은 문제를 두 가지 방식(단순 구현 vs 개선 구현)으로 작성한 뒤, 가독성/유지보수성 차이를 비교해보세요.
체크리스트
- [ ] 핵심 개념을 실제 데이터/입력에 적용해봤다.
- [ ] 실패 케이스를 최소 1개 이상 직접 재현해봤다.
- [ ] 코드에 재사용 가능한 함수(또는 클래스) 경계를 만들었다.