C.W.K.
Stream
Lesson 01 of 04 · published

sys.argv 와 argparse — stdlib 방법

~20 min · sys.argv, argparse, cli

Level 0호기심
0 XP0/93 lessons0/23 achievements
0/100 XP to next level100 XP to go0% complete

sys.argv — raw list

커맨드라인 인자 읽는 가장 단순한 방법 — sys.argv 가 list. sys.argv[0] 이 스크립트 이름. sys.argv[1:] 가 인자. positional 인자 한두 개 받는 작은 스크립트엔 OK. 플래그, 옵션, 도움말 텍스트 가진 거엔 argparse.

argparse — stdlib 의 CLI 파서

argparse 가 파싱, 검증, 타입 변환, 디폴트 값, 도움말 텍스트 생성 처리. parser = argparse.ArgumentParser(); parser.add_argument("--input"); args = parser.parse_args(). 결과는 정의된 각 인자에 속성 가진 namespace 객체. 자동 생성 --help 출력이 argparse 의 가장 큰 승리 중 하나.

Positional vs optional

add_argument("input") 가 positional 인자 선언. add_argument("--input") 가 optional 플래그 선언 (앞 -- 주의). add_argument("-i", "--input") 가 단축 + 긴 형태 둘 다. positional 이 디폴트로 필수, optional 은 required=True 아니면 X.

타입 변환과 choice

인자에 type=int 가 argparse 한테 문자열을 int 로 변환 + 검증. choices=["a", "b"] 가 고정 set 으로 제한. action="store_true"--verbose 를 플래그로 (값 X, 있냐 없냐). 대부분 CLI 패턴 커버.

원칙: argparse 가 Python 빌트인 + CLI 필요의 90% 처리. 많은 서브커맨드, 더 풍부한 기능, 데코레이터 스타일 선호일 때 click 또는 typer 손에 닿아. argparse vs typer 가 능력보다 스타일 선호.

Code

sys.argv — 그냥 기본·python
# script.py
import sys

print("script:", sys.argv[0])
print("args:", sys.argv[1:])

# python script.py hello world
# script: script.py
# args: ['hello', 'world']
argparse — 최소·python
import argparse

parser = argparse.ArgumentParser(description="정수 처리.")
parser.add_argument("integers", type=int, nargs="+", help="합할 정수")
parser.add_argument("--verbose", action="store_true", help="verbose 출력")

args = parser.parse_args()

if args.verbose:
    print("summing:", args.integers)
print("total:", sum(args.integers))

# python script.py 1 2 3 4 --verbose
# summing: [1, 2, 3, 4]
# total: 10

# python script.py --help    자동 도움말 생성
Positional / optional / type / choices·python
import argparse

parser = argparse.ArgumentParser()

# Positional — 필수
parser.add_argument("input")

# Optional — 단축 + 긴 형태
parser.add_argument("-o", "--output", default="result.txt")

# 타입 변환 + 범위
parser.add_argument("--port", type=int, default=8000)

# 제한된 choice
parser.add_argument("--mode", choices=["dev", "prod"], default="dev")

# Boolean 플래그
parser.add_argument("--verbose", action="store_true")

# 카운팅 플래그 — -vvv → 3
parser.add_argument("-v", action="count", default=0)

args = parser.parse_args()
print(args)
서브커맨드 — argparse 스타일·python
import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest="command", required=True)

# 'add' 서브커맨드
add_parser = subparsers.add_parser("add", help="두 숫자 더하기")
add_parser.add_argument("a", type=int)
add_parser.add_argument("b", type=int)

# 'multiply' 서브커맨드
mul_parser = subparsers.add_parser("multiply", help="두 숫자 곱하기")
mul_parser.add_argument("a", type=int)
mul_parser.add_argument("b", type=int)

args = parser.parse_args()

if args.command == "add":
    print(args.a + args.b)
elif args.command == "multiply":
    print(args.a * args.b)

# python script.py add 3 4         → 7
# python script.py multiply 3 4    → 12
# python script.py --help          서브커맨드 보여줌

External links

Exercise

argparse 로 작은 CLI 도구 — python tool.py [--verbose] [--count N] input output. 필수 positional 이 input/output path. --count 가 디폴트 1 인 옵션 int. --verbose 가 플래그. 스크립트가 그냥 파싱된 인자 출력. 도움말 텍스트 추가. --help 로 실행 + 자동 도움말 생성 확인. 다양한 조합 테스트.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.