자택경비대

파이썬 argparse 모듈에서 버전 옵션과 필수 옵션 혼용하는법

Programming

Pythonargparse모듈은 Cgetopt.h 처럼 명령 인자를 받아서 옵션으로 해석할 수 있도록 돕는 모듈이다.

기본적인 사용방법은 다음과 같다.


import argparse



parser = argparse.ArgumentParser()

parser.add_argument('--foo')

args = parser.parse_args()

문제는, --version 같은 옵션은 별 다른 옵션 없이 progname --version 형태로 전달하게 되면 일반적으로 정상적으로 버전을 출력하고 끝나는데, 항상 요구되는 Required 인자, 혹은 옵션이 전달되지 않은 경우 에러를 발생시키는 Positional argument와 함께 사용하려하면 --version 옵션을 붙이고도 다른 요구사항을 만족시키지 못해 에러를 발생시키게 된다.


import argparse



parser = argparse.ArgumentParser()

parser.add_argument('foo')  # `foo` 가 제공되지 않으면 에러가 발생한다.

parser.add_argument('--version')

args = parser.parse_args()  # 다음의 `version` 옵션 체크 이전에 에러가 발생하기 때문에 버전이 정상적으로 출력되지 못한다.

if args.version:

    print(__version__)

이런 경우의 해결 방법은 action 어트리뷰트를 action='version' 으로 설정하고, version=__version__ 처럼 version 어트리뷰트를 추가로 지정해주면 위와 같은 상황에서 에러를 발생시키지 않고, 버전을 정상 출력 한 뒤, 종료된다.


import argparse



parser = argparse.ArgumentParser()

parser.add_argument('foo')

parser.add_argument('--version', action='version', version=__version__)

args = parser.parse_args()  # "1.0.0"

# 아래 옵션 검사, 버전 출력 구문은 더 이상 필요없다

# if args.version:

#    print(__version__)