파이썬의 커맨드 라인 파싱 모듈 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