본문으로 바로가기
728x90

argparse

  • argparse 모듈은 명령행 옵션, 인자와 부속 명령을 위한 파서 모듈이다.
  • 사용자 친화적인 명령행 인터페이스를 쉽게 작성하도록 한다.
  • 도움말과 사용법 메시지를 출력해주며, 사용자가 잘못된 인자를 주면 에러를 발생시킨다.

 

 

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

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

docs.python.org

 

 

예제

 

간단하게 활용 방안에 대한 예제입니다.

 

import pickle
import argparse

parser = argparse.ArgumentParser(description='New OR Continue')
parser.add_argument('-n', '--new', dest='new', default=False, help='new run')
parser.add_argument('-c', '--continue', dest='continue', default=True, help='continue run')
args = parser.parse_args()

print(args)
# print(args.__dict__['new'], type(args.__dict__['new']))
# print(args.__dict__['continue'], type(args.__dict__['continue']))

data = None
if args.__dict__['new']:
    print('new run')
    data = [i for i in range(100)]

elif args.__dict__['continue']:
    print('continue run')
    with open('data.pkl', 'rb') as f:
        data = pickle.load(f)
        
print(data)

 

접근은 add_argument 함수의 dest 값으로 하시면 되겠습니다.

parser.add_argument('-n', '--new', dest='new', default=False, help='new run')
...
print(args.__dict__['new'], type(args.__dict__['new']))

 

도움말 보기

python ex.py -h
usage: ex.py [-h] [-n NEW] [-c CONTINUE]

New OR Continue

optional arguments:
  -h, --help            show this help message and exit
  -n NEW, --new NEW     new run
  -c CONTINUE, --continue CONTINUE
                        continue run

 

인자를 생략하여 실행 결과입니다.

continue 인자의 default 값은 True 입니다.

python ex.py
Namespace(continue=True, new=False)
continue run
[1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49]

 

-n 옵션을 주어서 실행했습니다.

근데 많이 어색합니다.

python ex.py -n True
Namespace(continue=True, new='True')
new run
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

 

인자 뒤에 값을 필요로 하지 않은 경우도 있습니다.

다음과 같은 형태로 사용하고 싶은데 argparse 에 의해 오류가 발생합니다.

python ex.py -n
usage: ex.py [-h] [-n NEW] [-c CONTINUE]
ex.py: error: argument -n/--new: expected one argument

 

 

두 번째 예제 코드입니다.

import pickle
import argparse

parser = argparse.ArgumentParser(description='New OR Continue')
parser.add_argument('-n', '--new', dest='new', action='store_true', help='new run')
# parser.add_argument('-n', '--new', dest='new', action='count', default=0, help='new run')
args = parser.parse_args()

data = None
if args.__dict__['new']:
    print('new run')
    data = [i for i in range(100)]
else:
    print('continue run')
    with open('data.pkl', 'rb') as f:
        data = pickle.load(f)

print(data)

 

add_argument 함수의 action 인자에 count 혹은 store_true 를 사용하면 됩니다.

count 는 해당 인자가 몇 번 나왔는지 카운트하는 기능을 합니다. (여기서는 한 번이면 되겠죠)

store_true 는 해당 옵션이 명령줄에 제공되는 경우 파서의 딕셔너리에 True 를 저장합니다.

parser.add_argument('-n', '--new', dest='new', action='store_true', help='new run')

parser.add_argument('-n', '--new', dest='new', action='count', default=0, help='new run')
python ex2.py

continue run
[1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49]

python ex2.py -n

new run
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]