본문 바로가기

프로그래밍언어/Python

[Python] argparser

반응형

CLI에서 프로그램을 실행시킬  argument '-c', '--help' 등과 같은 옵션들을   있다. 파이썬에서는 이러한 argument 파싱하는 모듈로 argparse 제공한다.

 

argparse 모듈을 사용하여 사용자 친화적인 cli interface 쉽게 작성할  있다.  모듈은 옵션으로 가능한 arguments 정의하고, sys.argv 어떻게 파싱할 것인가를 설정한다. 그리고 자동으로 help usage, issue error 등의 옵션을 생성해준다.

 

 

1. ArgumentParser

 

class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True, exit_on_error=True)

 

새로운 ArgumentParser 객체를 생성한다. ArgumentParser 객체는 명령행을 파이썬 데이터형으로 파싱하는데 필요한 모든 정보를 담고 있다. 모든 매개 ㅂ녀수는 키워드 인자로 전달되어야 한다.

 

- prog: 프로그램의 이름 (default: sys.argv[0])

- usage: 프로그램 사용법을 설명하는 문자열 (default: parser에 추가된 인자로부터 만들어지는 값)

- description: 인자 도움말 전에 표시할 텍스트 (default: none)

- epilog: 인자 도움말 후에 표시할 텍스트 (default: none)

- parent: ArgumentParser 객체들의 리스트로 해당 객체들의 인자 들을 재사용할 수 있다.

- formatter_class: 도움말 출력을 사용자 정의하기 위한 클래스

- prefix_chars: 선택 인자 앞에 붙는 문자 집합 (default: '-')

- fromfile_prefix_chars: 추가 인자를 읽어야 하는 파일 앞에 붙는 문자 집합 (default: None)

- argument_default: 인자의 전역 기본값 (default: None)

- conflict_handler: 충돌하는 선택 사항을 해결하기 위한 전략

- add_help: 파서에 '-h. --help' 옵션을 추가 (default: True)

- allow_abbrev: 약어가 모호하지 않으면 긴 옵션을 축약할 수 있도록 한다. (default: True)

- exit_on_error: 에러가 발생했을 때 ArgumentParser가 에러 정보로 종료되는지를 결정 (default: True)

 

 

2. add_argument()

 

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

 

- name or flags: 옵션 문자열의 이름이나 리스트. ex) foo, -f, --foo

# positional argument
parser.add_argument('foo')

# optional argument
parser.add_argument('-b', '--bar')

 

- action: 해당 인자가 호출 되었을 때 수행할 액션의 기본형 (default: 'store')

# 'store' - 인자값을 저장
parser.add_argument('--foo')

# 'store_const' - const 키워드 인자에 의해 지정된 값을 저장한다.
parser.add_argument('--foo', action='store_const', const=42)

# 'store_true' / 'store_false' - 각각 Ture, False 값을 저장한다.
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_false')

# 'append' - 리스트를 저장하고 각 인자 값을 리스트에 추가한다. 옵션을 여러번 지정할 수 있도록 하는 데 유용하다.
parser.add_argument('--foo', action='append')

# 'append_const' - 리스트를 저장하고 const 키워드 인자로 지정된 값을 리스트에 추가합니다. const 키워드의 기본값은 None이다.
parser.add_argument('--foo', action='append_const', const=int)

# 'count' - 해당 키워드 인자가 등장한 횟수를 계산한다.
parser.add_argument('-v', '--verbose', action='count')

# 'version' - 'version=' 키워드 인자를 기대하고 호출되면 버전 정보를 출력하고 종료한다.
parser.add_argument('--version', action='version', version='%(prog)s 2.0'

# 'extend' - 리스트를 저장하고 각 인자 값으로 리스트를 확장한다.
parser.add_argument('--foo', action='extend')

 

- nargs: 소비되어야 하는 명령행 인자의 수

- const: 일부 action 및 nargs를 선택할 때 필요한 상수값

# choices의 리스트에 있는 값만 입력 가능
# foo, bar 외의 값을 입력 시에 오류 발생
parser.add_argument('--foo', choices=['foo', 'bar'])

 

- default: 인자가 명령행에 없고 namespace 객체에 없으면 생성되는 값

- type: 명령행 인자가 변환되어야 할 타입

- choices: 인자로 허용되는 값의 컨테이너

- required: 명령행 옵션을 생략할 수 있는지 아닌지 결정

- help: 인자가 하는 일에 대한 간단한 설명

- metavar: 사용 메시지에 사용되는 인자의 이름

- dest: parse_args() 가 반환하는 객체에 추가될 attribute의 이름

 

3. argparse 구현 예시

# create parser
import argparse
parser = argparse.ArgumentParser()


# positional argument
# **.py [-h] value
# - help: explaine about argument
# - type: type of argument
parser.add_argument("value", help="input value", type=int)


# optional argument
# **.py [-h] [--verbosity VERBOSITY] value
parser.add_argument("--verbosity", help="increase output verbosity")


# with action
# **.py [-h] [--verbosity VERBOSITY] [--verbose] value
# - action="store_true": true if the option is specified, false otherwise
# -v: short option
parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true")


# get parsed args
args = parser.parse_args()

 

 

[reference]

- https://docs.python.org/ko/3/library/argparse.html

 

argparse — 명령행 옵션, 인자와 부속 명령을 위한 파서 — Python 3.9.7 문서

argparse — 명령행 옵션, 인자와 부속 명령을 위한 파서 소스 코드: Lib/argparse.py argparse 모듈은 사용자 친화적인 명령행 인터페이스를 쉽게 작성하도록 합니다. 프로그램이 필요한 인자를 정의하면

docs.python.org

 

반응형