Pythonのコマンドライン解析モジュールargparse
説明
argparse
はPythonの標準ライブラリの一つで、コマンドラインから渡された引数を扱うのに役立つ。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'>
で、プリントしてみると辞書のように見えることがわかる。各引数の名称を属性として持つ。コンソールウィンドウに入力する方法は以下の2つがある。
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