argparseの基本的な実装
pythonでコマンドライン引数を使いたいときはargparseです。
基本的な実装はこうなります。
# test.py import argparse # パーサーオブジェクトを生成する。 parser = argparse.ArgumentParser() # コマンドラインからの引数の仕様を登録する。 # 初期値を設定できる。 parser.add_argument('--value_01', default=2, type=int) parser.add_argument('--value_02', default=4.5, type=float) parser.add_argument('--value_03', default='aaa', type=str) parser.add_argument('--value_04', default=None, type=str) # パーサーを実行し、引数を解析する。 # コマンドラインからの引数がない場合は、初期値のままとなる。 args = parser.parse_args() print(args) print(type(args)) # Namespace(value_01=2, value_02=4.5, value_03='aaa', value_04=None) # <class 'argparse.Namespace'> # 変数の値を表示する。 print(args.value_01) print(args.value_02) print(args.value_03) print(args.value_04) # 2 # 4.5 # aaa # None # vars()で辞書型に変換できる。 print(vars(args)) print(type(vars(args))) # {'value_01': 2, 'value_02': 4.5, 'value_03': 'aaa', 'value_04': None} # <class 'dict'>
コマンドライン引数を使ってみる
ハイフン✕2+変数名で変数を指定して、スペースを空けて、変数の値を入力します。
$ python test.py --value_01 5 --value_02 5.5 --value_03 ddd --value_04 eee 5 5.5 ddd eee
もっと便利に使う
引数の値を限定させる
choicesで、コマンドライン引数の値を選択肢の中の値だけに限定できます。
# test_choises.py import argparse parser = argparse.ArgumentParser() # choicesオプションで選択肢を設定 parser.add_argument( '--mode', default=None, type=str, choices=['fast', 'slow'], ) args = parser.parse_args() print(args.mode)
$ python test_choises.py --mode slow slow
選択肢に無い単語を使うと、エラーになります。
$ python test_choises.py --mode middle usage: test_choises.py [-h] [--mode {fast,slow}] test_choises.py: error: argument --mode: invalid choice: 'middle' (choose from 'fast', 'slow')
引数の入力を必須にする
requiredで、指定したパラメータの入力を必須にできます。
# test_required.py import argparse parser = argparse.ArgumentParser() # requiredオプションでmodeパラメータを必須にする。 parser.add_argument( '--mode', default='default', type=str, choices=['fast', 'slow'], required=True, ) args = parser.parse_args() print(args.mode)
$ python test_required.py --mode fast fast
必須パラメータの入力が無い場合は、エラーになります。
$ python test_required.py usage: test_required.py [-h] --mode {fast,slow} test_required.py: error: the following arguments are required: --mode
オプション設定時の動作を指定する
actionで、コマンドライン引数でオプションが設定されたときに、何をするか、指定できます。
最も使う action がstore_true、store_falseです。
store_trueは、引数を使ってオプション設定されると、その引数にTrueを格納します。
下の例は、displayパラメータを作成し、引数でdisplay設定されると、displayパラメータにTrueを格納するコードです。
# test_action.py import argparse parser = argparse.ArgumentParser() # actionで、動作を設定する。 parser.add_argument( '--display', default=False, action='store_true', ) args = parser.parse_args() print(args) if args.display: print(args.display)
displayオプション設定しない場合は、何も変わりません。
$ python test_action.py Namespace(display=False)
displayオプションを設定すると、displayパラメータにstore_true(Trueが格納)されます。
$ python test_action.py --display Namespace(display=True) True
オプションが長いから短くする
ツールとして提供するときは、オプションを短くすると便利です。
short-optionsで、短いオプションにできます。
上のtest_action.pyのコードを改変し、displayオプション設定を短くしてみます。
# test_action2.py import argparse parser = argparse.ArgumentParser() # ハイフンひとつの短いオプションを追加する。 parser.add_argument( '-d', '--display', default=False, action='store_true', ) args = parser.parse_args() print(args) if args.display: print(args.display)
オプション設定を-dで行います。
$ python test_action2.py -d Namespace(display=True) True
ハイフン✕2のオプション設定も使用できます。
$ python test_action2.py --display Namespace(display=True) True