시스템 관리 도구 개발이나 디버깅 시 명령행 인터페이스 구현이 필요합니다. Python에서는 argparse 모듈을 사용하여 UNIX/POSIX 표준을 준수하는 명령행 도구를 구축할 수 있습니다.
1. Python 명령행 인자 처리 모듈
Python에는 세 가지 내장 명령행 인자 처리 모듈이 존재합니다:
- getopt: 기본적인 인자 처리만 가능
- optparse: 기능 우수하지만 Python 2.7부터 deprecated
- argparse: 사용자 친화적 인터페이스, 자동 도움말 생성, 오류 처리 기능 보유
2. argparse 핵심 기능
- 위치 인자(positional argument) 처리
- 하위 명령어(subcommand) 지원
- +, / 같은 대체 옵션 접두사 사용
- 가변 개수 인자 처리
- 상세 사용법 메시지 생성
- 사용자 정의 타입 및 액션 지원
3. 기본 사용법 예제
import argparse
import sys
def main():
parser = argparse.ArgumentParser(
prog="Calculator",
description='명령행에서 정수 합산',
epilog="결과는 지정된 파일에 저장됩니다"
)
parser.add_argument(
'values', metavar='N', nargs='+', type=int,
help='합산할 정수 값들'
)
parser.add_argument(
'--output', default=sys.stdout,
type=argparse.FileType('w'),
help='결과 저장 파일 경로'
)
config = parser.parse_args()
total = sum(config.values)
config.output.write(f'합계: {total}')
config.output.close()
if __name__ == '__main__':
main()
4. ArgumentParser 주요 매개변수
| 매개변수 | 기능 | 기본값 |
|---|---|---|
| prog | 프로그램 이름 | sys.argv[0] |
| description | 프로그램 설명 | None |
| epilog | 도움말 하단 설명 | None |
| parents | 상속할 부모 파서 | [] |
| formatter_class | 도움말 포맷터 | HelpFormatter |
| add_help | 도움말 옵션 추가 | True |
5. 고급 기능 활용
5.1 사용자 정의 액션
class CustomAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
print(f'{option_string} 트리거됨')
setattr(namespace, self.dest, values.upper())
parser.add_argument('--transform', action=CustomAction)
5.2 유효성 검사
def validate_positive(value):
ival = int(value)
if ival <= 0:
raise argparse.ArgumentTypeError("양수만 허용")
return ival
parser.add_argument('--count', type=validate_positive)
5.3 하위 명령어 구현
main_parser = argparse.ArgumentParser()
subparsers = main_parser.add_subparsers()
cmd_parser = subparsers.add_parser('execute')
cmd_parser.add_argument('--job', required=True)
config = main_parser.parse_args()
6. 인자 처리 전략
| 액션 | 설명 |
|---|---|
| store | 값 저장 (기본 동작) |
| store_const | 고정값 저장 |
| store_true/false | 부울 값 저장 |
| append | 리스트에 값 추가 |
| count | 옵션 등장 횟수 카운트 |
nargs 매개변수를 통해 다양한 인자 수 처리 가능:
?: 선택적 단일 인자*: 0개 이상 인자+: 1개 이상 인자- 숫자: 정확한 개수 지정