logo

파이썬의 커맨드 라인 파싱 모듈 argparse 📂프로그래밍

파이썬의 커맨드 라인 파싱 모듈 argparse

설명

argparse는 파이썬 표준라이브러리 중 하나로 명령줄command-line로 전달받은 인자argument를 다루는데 도움을 준다. 입력인자를 전달받는 것 자체는 sys.argv로 가능하지만, argparse를 쓰면 인자의 타입, 필수여부 등을 지정하는 심화 기능을 사용할 수 있다.

코드

  • argparse.ArgumentParser: 객체를 생성.
  • add_argument(): 전달받을 인자를 등록하는 메소드.
  • parse_args(): 전달받은 인자를 파싱하는 메소드.
# 테스트 파일 작성
import argparse

parser = argparse.ArgumentParser()

parser.add_argument("-e", "--epoch", type=int)
parser.add_argument("-s", "--seed", type=int)
parser.add_argument("-a", "--activ_fn", type=str)

args = parser.parse_args()

print(type(args))
print("args:", args)

print("epoch:", args.epoch)
print("seed:", args.seed)
print("activ_fn:", args.activ_fn)

여기서 args의 타입은 <class 'argparse.Namespace'>이며, 프린트해보면 딕셔너리처럼 생겼다는 것을 알 수 있다. 각 인자의 이름을 속성으로 가진다. 콘솔창에 입력하는 방법은 다음의 두 가지가 있다.

  • python test.py -epo 10 -s 2 -a relu
  • python test.py -epo=10 -s=2 -a=relu
# 콘솔창에서 실행
>python test.py -epo 10 -s 2 -a relu

<class 'argparse.Namespace'>
args: Namespace(epoch=10, seed=2, activ_fn='relu')
epoch: 10
seed: 2
activ_fn: relu

변수명 --foo

인자의 이름은 "-f" 혹은 "--foo"와 같은 형식으로 입력한다. 관습적으로 약어의 경우 하나의 대시 -, 전체 이름의 경우 두 개의 대시 --를 쓰지만 -foo처럼 작성해도 코드는 돌아간다.

타입 type

type 옵션으로 타입을 지정할 수 있다. 이를 int로 두면, 입력인자가 1일 때 문자열 ‘1’이 아니라 숫자 1을 값으로 전달받는다.

인자의 수 nargs

nargs 옵션으로 몇 개의 인자를 받을지 정할 수 있다. 즉 이 옵션을 사용하면 리스트를 인자로 받을 수 있다.

# test.py 코드
parser.add_argument("--dx", type=float, nargs=3)
parser.add_argument("--dy", type=float, nargs=2)
args = parser.parse_args()

print("dx:", args.dx, ", type of dx:", type(args.dx))
print("dy:", args.dy, ", type of dy:", type(args.dy))

# 콘솔창에서 실행
>python test.py --dx 0.1 0.01 0.001 --dy 0.2 0.02

dx: [0.1, 0.01, 0.001] , type of dx: <class 'list'>
dy: [0.2, 0.02] , type of dy: <class 'list'>

+*를 사용하면 인자의 수를 지정하지 않아도 되며, 한 개 이상의 인자를 리스트로 저장한다. 이 둘의 차이점은 +는 반드시 하나 이상의 인자가 입력되어야하고, *는 인자가 입력되지 않아도 된다는 것이다.

기본 값 default

default 옵션으로 기본 값을 설정할 수 있다.

parser.add_argument("-e", "--epoch", type=int, defalut=100000)

그 외

외에 action, required, help, metavar 등의 옵션이 있다.1

환경

  • OS: Windows11
  • Version: Python 3.9.13