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
'프로그래밍언어 > Python' 카테고리의 다른 글
[Python] Magic method - 객체 생성, 초기화 (0) | 2021.12.15 |
---|---|
[Python] urlparse (0) | 2021.10.16 |
[Python] Python 병렬처리 - threading (3) (0) | 2021.05.08 |
[Python] Python 병렬처리 - threading (2) (0) | 2021.04.25 |
[Python] Python 병렬처리 - threading (1) (1) | 2021.04.25 |