Python 명령행 인자 처리: argparse 모듈 활용

시스템 관리 도구 개발이나 디버깅 시 명령행 인터페이스 구현이 필요합니다. 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개 이상 인자
  • 숫자: 정확한 개수 지정

태그: python argparse 명령행인터페이스 cli 인자파싱

6월 30일 22:01에 게시됨