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

