파이썬 모듈 argparse

강기호·2023년 2월 20일
0

Python모듈

목록 보기
1/1

Argparse 모듈?

run.py 라는 파이썬 스크립트가 있을 때 명령 프롬프트에서 다음과 같이 실행 가능

$ python ./run.py

만약 어떤 옵션에 따라서 파이썬 스크립트가 다르게 동작하도록 해주려면 인자를 입력해야함. 입력한 인자를 파싱한 후 인자 값에 따라 적당한 동작을 수행해줘야 합니다. 이처럼 인자를 파싱할 때 사용하는 모듈이 바로 argparse

import argparse

# 인자값을 받을 수 있는 인스턴스 생성
parser = argparse.ArgumentParser()

# 입력받을 인자값 설정 (default 값 설정가능)
parser.add_argument('--epoch', type=int,   default=150)
parser.add_argument('--batch_size', type=int,   default=128)
parser.add_argument('--lr_initial', type=float, default=0.1)

# args 에 위의 내용 저장
args = parser.parse_args()

# 입력받은 인자값 출력
print(args.epoch)
print(args.batch_size)
print(args.lr_initial)
# 터미널에서 다음과 같이 인자를 설정할 수 있다.
$ python run.py --epoch=256 --batch_size 64 --lr_initial 0.1

ArgumentParser 객체


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

  • 참고로 sys.argv[0] 에는 해당하는 스크립트가 놓여지는 장소가 저장된다.
  • sys.argv[1] 에는 처리할 파일 이름이 놓인다.
  • 기본적으로 argument parser은 sys.argv[0] 을 사용하여 도움말 메시지에 프로그램의 이름을 표시한다.
  • parser = argparse.ArgumentParser(prog='myprogram')
    위와 같이 prog를 설정할 경우
  • parser.print_help() 의 결과 myprogram [-h] 으로 이름이 재 설정 된다.
  • %(prog)s 포맷 지정자를 사용해서 도움말에 쓸 수도 있다.
    parser.add_argument('--foo', help='foo of the %(prog)s program')

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

  • parser = argparse.ArgumentParser(prog='PROG'. usage='%(prog)s [options]')
  • usage 또한 재정의 가능.

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

  • parser = argparse.ArgumentParser(description='A foo that bars')

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

  • parser = argparse.ArgumentParser(epilog="And that's how you'd foo a bar")
  • parents - ArgumentParser 객체들의 리스트이고, 이 들의 인자들도 포함된다
  • 때로 여러 바서가 공통 인자 집합을 공유하는 경우가 있다.
  • 반복정의하는 대신, 모든 공유인자를 갖는 파서를 ArgumentParser 에 parents= 인자로 전달할 수 있다.
  • parent_parser = argparse.ArgumentParser(add_help=False)
  • parent_parser.add_argument('--parent', type=int)
  • foo_parser = argparse.ArgumentParser(parents=[parent_parser])

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

  • argparse.RawDescriptionHelpFormatter
  • argparse.RawTextHelpFormatter
  • argparse.ArgumentDefaultsHelpFormatter
  • argparse.MetavarTypeHelpFormatter

prefix_chars - 선택 인자 앞에 붙는 문자 집합 (기본값: - ).

  • -f /--foo 같이 앞에 붙는 접두사를 다른 것으로 바꿀 수 있다.

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

  • 긴 인자 목록을 다룰 때, 인자 목록을 명령행에 입력하는 대신 파일에 보관하는 것이 좋다.
  • fromfile_prefix_chars= 인자는 말 그대로, 지정된 문자로 시작하는 인자는 파일로 간주하고 파일에 포함된 인자로 대체한다.
  • with open('args.txt', 'w') as fp: fp.write('-f\nbar')
  • parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
  • parser.add_argument('-f')
  • parser.parse_args(['-f', 'foo', '@args.txt'])
    위의 ['-f', 'foo', '@args.txt'] 식은 ['-f', 'foo', '-f', 'bar'] 와 동등하게 취급된다.

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

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

  • 같은 옵션 문자열을 가진 두 개의 액션을 허용하지 않기 때문에 예전인자를 대체할 수 있다.
  • conflict_handler = 'resolve'

add_help - 파서에 -h/--help 옵션을 추가합니다 (기본값: True)

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


add_argument() 메서드

action - 명령행에서 이 인자가 발견될 때 수행 할 액션의 기본형.

  • 'store' - 인자 값을 저장. 기본 액션.
  • 'store_const' - const 키워드 인자에 의해 지정된 값을 저장.
  • 'store_true' / 'store_false' - 각각 true 와 false 를 저장.
    - store_true로 설정했을때 옵션을 주게 되면 true, 아니면 false로 설정됨, store_false는 store_true의 반대개념
import argparse 

parser = argparse.ArgumentParser()
parser.add_argument("-a" , "--actual" , type=int , default = 10)
parser.add_argument("-epoch" ,  type=int , default = 100)
parser.add_argument("-lr" "--learing_rate" ,  type=float , default = 1e-4)
parser.add_argument("-flag" , action='store_true')
opt = parser.parse_args()

opt = vars(opt) # opt에 들어간 값들을 vars의 내장함수에 의해 dict type으로 변환 
def a(**kward):
    print(kward.keys())
    print(kward.values())

if __name__ == "__main__":
    a(**opt)
$ python run.py -flag # flag옵션 지정 시 true로 저장 
# 만약 -flag 옵션을 주지 않으면 false로 저장하고 있음.

  • 'append' - 리스트를 저장하고 각 인자 값을 리스트에 추가.
  • 'count' - 키워드 인자가 등장한 횟수를 계산.
  • 'help' - 현재 파서의 모든 옵션에 대한 완전한 도움말 메시지를 출력하고 종료한다.
  • 'version' - add_argument() 호출에서 version= 키워드 인자를 기대하고, 호출되면 버전 정보를 출력하고 종료한다.
  • 'extend' - 리스트로 저장하고 각 인자 값으로 리스트를 확장한다.

nargs - 입력되어야 하는 인자의 수.(number + args)

예제1 nargs = 1

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--name', nargs=1)
args = parser.parse_args()
print(args.name)

위의 예제에서 --name 옵션은 하나의 argument를 입력받아야 하고, 입력받은 것은 args.name에 리스트 형태로 하나의 요소가 저장된다.

예제 2 nargs = '+'

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--numbers', nargs='+')
args = parser.parse_args()
print(args.numbers)

위의 예제에서 --number 옵셥은 한개 또는 그 이상의 argument를 입력받아야 하고 입력받은 값은 args.numbers에 list 형태로 저장 여러값을 입력할 때에는 , 없이 입력하면 됨

> $ python main.py --numbers  a b 10

예제3 nargs = '*' , nargs = 2

  • narg = '*' 은 0개 또는 그 이상의 argument를 입력받아야 하고 나머지는 '+'와 동일
  • narg=2 인경우는 옵션의 인자가 2개를 입력받아야 한다.(1개 , 3개 이상 부터 오류)

default - 옵션을 주지 않았을 때의 default 값

type : 옵션을 주어야 하는 type을 결정

  • int , float , bool , str으로 설정할 수 있으며 터미널에서 지정한 type과 다른 값을 준 경우 오류 발생

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

참고 : https://supermemi.tistory.com/entry/%EB%A8%B8%EC%8B%A0-%EB%9F%AC%EB%8B%9D-%EB%AA%A8%EB%8D%B8%EC%97%90%EC%84%9C-argparse-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95-%EC%98%88%EC%A0%9C

0개의 댓글