상세 컨텐츠

본문 제목

[파이썬(Python)] #2. argparse 사용하기

python

by 빨간눈동자 2021. 8. 12. 00:05

본문

반응형

python script를 실행할때, 인자 값을 전달하여 함께 실행하고 싶을 때 "argparse" 모듈을 사용한다. 

기본적으로 아래와 같은 format을 가진다. 

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

해당 test.py를 그냥 실행시켜 보면 아무것도 화면에 표시되지 않는다. 

이제 아래와 같이 옵션?을 주고 실행해보도록 하자. 

위 실행 결과를 통해 아래와 같은 사항을 알 수 있다. 

  • 아무런 옵션을 주지 않으면 아무런 결과도 출력되지 않는다. 
  • "--help" 옵션을 함께 주면, script에 아무것도 작성하지 않았지만, help message가 출력되는 것을 확인할 수 있다. 
  • "--help" 옵션은 "-h" 로도 사용할 수 있다. 

이제 아래 script를 수행해 보도록 하자. 

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("parameter")
args = parser.parse_args()
print(args.parameter)

우선 옵션(인자) 없이 실행해보도록 하자. 

error가 발생하였으며, "parameter" arguments가 요구된다는 메세지가 출력되었다. 

 

이제 옵션(인자) "hello" 를 추가하여 실행해보자 

인자로 넘긴 hello 라는 단어가 출력된 것을 알 수 있다. 

참고로 별다른 옵션을 주지 않으면, argparse 는 전달되는 인자 모두 string으로 인식한다. 

 

이번 예제에서는 하기 2 문장이 추가되었다. 

...
parser.add_argument("parameter")
args = parser.parse_args()
...
print(args.parameter)

옵션으로 입력된 값은 parameter 라는 변수에 저장이 된다. 또한 parser.parse_args()를 통해 return된 args 변수를 통해 

parameter 변수에 접근하여 사용( cf. printf )할 수 있다

 

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("parameter", help="you should enter some value." )
args = parser.parse_args()
print(args.parameter)

add_argument()의 2번째 인자인 "help"는 script 실행 시 --help 옵션과 함께 실행하면, 아래와 같이 간단한 guide를 출력해 줄 수 있다. 

 

add_argument() 메서드

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

  • name or flags - 옵션 문자열의 이름이나 리스트, 예를 들어 foo 또는 -f, --foo.
  • action - 명령행에서 이 인자가 발견될 때 수행 할 액션의 기본형.
  • nargs - 소비되어야 하는 명령행 인자의 수.
  • const - 일부 action  nargs 를 선택할 때 필요한 상숫값.
  • default - 인자가 명령행에 없고 namespace 객체에 없으면 생성되는 값.
  • type - 명령행 인자가 변환되어야 할 형.
  • choices - 인자로 허용되는 값의 컨테이너.
  • required - 명령행 옵션을 생략 할 수 있는지 아닌지 (선택적일 때만).
  • help - 인자가 하는 일에 대한 간단한 설명.
  • metavar - 사용 메시지에 사용되는 인자의 이름.
  • dest - parse_args() 가 반환하는 객체에 추가될 어트리뷰트의 이름.

 

name of flags

이제 하나하나 살펴보도록 하자.

add_argument() 메서드는 -f  --foo 와 같은 선택 인자가 필요한지, 파일 이름의 리스트와 같은 위치 인자가 필요한지 알아야 합니다.

parse_args()가 호출되면, 선택 인자는 - 접두사로 식별되고, 그 밖의 인자는 위치 인자로 간주합니다:

parser.add_argument('-f', '--foo')
parser.add_argument('bar')

 

Action

store : 인자 값을 저장합니다. default option

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args = parser.parse_args('--foo 1'.split())
print(args)

store_const : const에 저장되어있는 42를 foo에 저장한다. 

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_const', const=42)
args = parser.parse_args(['--foo'])
print(args)

store_true & store_false : 각 변수에 true와 false를 저장한다.

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_false')
parser.add_argument('--baz', action='store_false')
args = parser.parse_args('--foo --baz --bar'.split())
print(args)

append : 리스트 형식으로 해당 변수에 저장

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='append')
args = parser.parse_args('--foo 1 --foo 2'.split())
print(args)

append_const : 리스트 형태로 저장한다.  ( dest 옵션은 아래에 설명할 예정 )

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--str', dest='types', action='append_const', const=str)
parser.add_argument('--int', dest='types', action='append_const', const=int)
args = parser.parse_args('--str --int'.split())
print(args)

count : 키워드 인자가 등장한 횟수를 출력한다.

help : help message를 출력하고 종료한다. 

version : add_argument() 호출에서 version= 키워드 인자를 기대하고, 호출되면 버전 정보를 출력하고 종료한다.

# test.py
import argparse
parser = argparse.ArgumentParser(prog='PROGRAM')
parser.add_argument('--version', action='version', version='%(prog)s 2.0')
args = parser.parse_args(['--version'])
print(args)

 

nargs

ArgumentParser 객체는 일반적으로 하나의 명령행 인자를 하나의 액션과 결합한다. nargs 키워드 인자는 다른 수의 명령행 인자를 하나의 액션으로 연결한다.

N

?

*+

 

Const

ArgumentParser action에 필요한 상수가 정의된다. 

 

Default

명령행 인자가 없을 경우, default 값을 설정합니다. 

# test.py
parser = argparse.ArgumentParser()
parser.add_argument('--foo', default=12)
args = parser.parse_args(['--foo', '6'])
print(args)

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', default=12)
#args = parser.parse_args(['--foo', '6'])
args = parser.parse_args()
print(args)

 

Type

명령행 인자는 일반적으로 string으로 인식합니다. type 키워드는 형변환에 사용됩니다. 

parser.add_argument('count', type=int)
parser.add_argument('distance', type=float)
parser.add_argument('street', type=ascii)
parser.add_argument('code_point', type=ord)
parser.add_argument('source_file', type=open)
parser.add_argument('dest_file', type=argparse.FileType('w', encoding='latin-1'))

 

choice

인자 값을 제한하기 위해서는 해당 keyword를 사용하면 된다. 미리 정의된 인자이외의 값이 선택되면 error를 출력한다.

# test.py
import argparse
parser = argparse.ArgumentParser(prog='game.py')
parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
args = parser.parse_args(['water'])
print(args)

 

required

옵션을 필수로 만들기 위해서는 required= 를 사용해야한다.

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', required=True)
args = parser.parse_args(['--foo', 'BAR'])
print(args)

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', required=True)
args = parser.parse_args()
print(args)

 

dest

사용자 정의 이름을 정의한다.

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar')
args = parser.parse_args('--foo XXX'.split())
print(args)

아래와 동일한 의미를 갖는다. 

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("bar")
args = parser.parse_args('XXX'.split())
print(args)

 

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

반응형

'python' 카테고리의 다른 글

[파이썬(Python)] #7. string  (0) 2021.08.17
[파이썬(Python)] #5. 파일 입/출력  (0) 2021.08.17
[파이썬(Python)] #4. 함수  (0) 2021.08.14
[파이썬(Python)] #3. os 모듈  (0) 2021.08.13
[파이썬(Python)] #1. python3 설치  (0) 2021.08.11

관련글 더보기