{{tag>[cli python argparse standard-library argument-parser]}}
====== argparse ======
Python 표준 라이브러리에서 option, positional argument, subcommand를 선언하고 ''sys.argv''를 검증·변환하는 CLI parser다.
===== Summary =====
* ''argparse.ArgumentParser''에 argument 규칙을 등록하고 ''parse_args()''로 해석한다.
* ''-h''/''--help'', usage, 오류 메시지를 자동 생성한다.
* 외부 dependency 없이 Python 3에서 사용할 수 있다.
===== Installation =====
''argparse''는 Python 3.2부터 포함된 표준 라이브러리이므로 별도 설치가 필요하지 않다.
python3 --version
python3 -c "import argparse; print(argparse.__file__)"
Windows에서 Python Launcher를 사용하면 ''py''로 바꿔 실행할 수 있다.
===== Usage =====
import argparse
parser = argparse.ArgumentParser(description="파일을 지정 횟수만큼 처리합니다.")
parser.add_argument("path", help="처리할 파일")
parser.add_argument("-n", "--count", type=int, default=1, help="반복 횟수")
parser.add_argument("--verbose", action="store_true", help="상세 출력")
args = parser.parse_args()
for _ in range(args.count):
print(args.path)
python3 app.py --help
python3 app.py --count 3 README.md
* ''**python3** APP.py PATH [OPTIONS]''
* ''**-n, --count** COUNT'': 값을 ''int''로 변환하며 기본값은 ''1''
* ''**--verbose**'': 지정 여부를 ''bool''로 저장
* ''**-h, --help**'': 자동 생성된 도움말을 표시하고 종료
===== Core API =====
* ''ArgumentParser(prog, description, epilog, ...)'' : parser와 help 기본 정보를 생성
* ''add_argument(name_or_flags, ...)'' : positional argument 또는 option 등록
* ''parse_args(args=None)'' : 기본적으로 ''sys.argv[1:]''을 해석하고 알 수 없는 argument에는 오류 발생
* ''parse_known_args()'' : 알려진 값과 나머지 argument를 나눠 반환
* ''add_subparsers()'' : ''git commit'' 같은 subcommand 구조 생성
* ''set_defaults()'' : parser 또는 subparser별 callback과 기본값 연결
* ''format_help()'' / ''print_help()'' : 도움말 문자열 반환 또는 출력
===== Common add_argument Options =====
* ''action="store_true"'' / ''action="store_false"'' : 값 없는 boolean flag
* ''type=int'' 또는 사용자 함수 : 입력값 변환과 검증
* ''choices=(...)'' : 허용 값 제한
* ''default=...'' : option이 생략됐을 때의 값
* ''required=True'' : optional-style option을 필수로 지정
* ''nargs="?"'', ''"*"'', ''"+"'' 또는 정수 : 소비할 argument 개수
* ''dest="name"'' : 결과 ''Namespace''의 attribute 이름 지정
* ''metavar="NAME"'' : help에 표시할 값 이름 지정
* ''help="..."'' : argument 설명; 기본값 표시는 ''ArgumentDefaultsHelpFormatter'' 활용
===== Examples =====
==== Subcommand와 callback ====
import argparse
def cmd_add(args):
print(f"add: {args.name}")
parser = argparse.ArgumentParser(prog="project")
subparsers = parser.add_subparsers(dest="command", required=True)
add_parser = subparsers.add_parser("add", help="항목 추가")
add_parser.add_argument("name")
add_parser.set_defaults(func=cmd_add)
args = parser.parse_args()
args.func(args)
python3 project.py --help
python3 project.py add demo
* ''**python3** PROJECT.py add NAME''
===== Troubleshooting =====
* 음수 값을 positional argument로 전달할 때 option으로 오인되면 ''--'' 뒤에 둔다: ''python3 app.py -- -1''.
* shell에서 공백을 포함한 값은 먼저 분리되므로 따옴표로 묶는다: ''--name "Jane Doe"''.
* library code에서 ''parse_args()''를 직접 호출하면 오류 시 ''SystemExit''이 발생한다. parser 구성과 실행 entry point를 분리하면 테스트하기 쉽다.
* 단순한 ''sys.argv'' indexing보다 입력 검증과 자동 help가 필요하면 ''argparse''를 사용한다.
===== Compatibility =====
* Python 3.9부터 ''exit_on_error''를 지원한다.
* Python 3.14의 ''suggest_on_error''와 color help 같은 최신 기능을 사용하면 이전 Python과 호환되지 않을 수 있으므로 최소 Python version을 확인한다.
===== Help =====
''argparse'' 자체는 ''python -m argparse''로 사용하는 독립 CLI가 아니다. 작성한 application에서 다음 명령으로 생성된 help를 확인한다.
python3 app.py --help
python3 app.py SUBCOMMAND --help
===== See Also =====
* [[python|Python]]
* [[python:sys:ko|sys]]
* [[python:typer:ko|Typer]]
* [[python:click:ko|Click]]
* [[https://docs.python.org/3/library/argparse.html|Python 공식 문서: argparse]]
* [[https://docs.python.org/3/howto/argparse.html|Python 공식 문서: argparse tutorial]]
===== History =====
* codex:: 2026-08-03 ''argparse'' CLI 작성 흐름, 핵심 API, subcommand 예제와 호환성 주의를 정리.
{{indexmenu>.#1|js}}