logo

Pythonのコマンドライン解析モジュールargparse 📂プログラミング

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)

その他

他にも、actionrequiredhelpmetavarなどのオプションがある。1

環境

  • OS: Windows11
  • Version: Python 3.9.13