Pythonのコマンドライン引数に既定値を設定する(argparse編)

Pythonのargparseモジュールで設定するコマンドライン引数に、既定値を設定します。

目次

  1. argparseモジュールとは
  2. コマンドライン引数の既定値を設定する
  3. 引数の既定値の設定例

argparseモジュールとは

argparseモジュールは、Pythonのスクリプトのコマンドライン引数を設定する便利モジュールです。使い方は 以前の投稿 を参照してください。

コマンドライン引数の既定値を設定する

argparseモジュールでは、パーサーオブジェクトに引数を登録する際にadd_argumentメソッドを使用します。その際に既定値を設定出来ます。

ArgumentParser.add_argument(name, [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest])
変数 内容
name str,list 引数の名前、またはそのリスト。
action str 省略可。既定値はstore。引数が存在したときのアクション。
nargs int,str 省略可。受け取るべき引数の数。
const   省略可。既定値はNone。actionとnargsに利用される定数。
default   省略可。既定値はNone。引数が指定されなかったときの既定値。
type   省略可。引数を変換する型。
choices   省略可。引数として許容できる範囲。
required bool 省略可。既定値はFalse。引数を省略可能かどうか。
help str 省略可。引数の説明。
metavar str 省略可。既定値は、位置引数の場合は名前。オプショナル引数の場合は名前を大文字に変換したもの。ヘルプで表示される引数の名前。
dest str 省略可。既定値はnameから接頭辞を削除したもの。パースしたときのプロパティ名。

defaultに既定値を設定すれば良いわけですね。

引数の既定値の設定例

オプショナル引数に既定値を設定してみました。省略可能なオプションに既定値を設定するのはよくあることですからね。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--hoge', default='foo')
parser.add_argument('--piyo')
parser.add_argument('fuwa')
parser.add_argument('saku')
args = parser.parse_args()
print('引数 hoge : ', args.hoge)
print('引数 piyo : ', args.piyo)
print('引数 fuwa : ', args.fuwa)
print('引数 saku : ', args.saku)

実行するとこうなります。

>python argtry.py ぬる ぽ
引数 hoge :  foo
引数 piyo :  None
引数 fuwa :  ぬる
引数 saku :  ぽ

>python argtry.py ぬる ぽ --hoge やほ
引数 hoge :  やほ
引数 piyo :  None
引数 fuwa :  ぬる
引数 saku :  ぽ

オプショナル引数 hoge に値を指定しない場合には既定値が、値を指定した場合には指定した値が、パースしたオブジェクトに格納されました。

では、位置引数に既定値を設定してみます。位置引数は基本的に省略不可なものに使用されると思いますが、省略したくなることもあるでしょう。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--hoge', default='foo')
parser.add_argument('--piyo')
parser.add_argument('fuwa', default='ぬる')
parser.add_argument('saku')
args = parser.parse_args()
print('引数 hoge : ', args.hoge)
print('引数 piyo : ', args.piyo)
print('引数 fuwa : ', args.fuwa)
print('引数 saku : ', args.saku)

実際のところ、これはエラーになります。

>python argtry.py ぽ
usage: argtry.py [-h] [--hoge HOGE] [--piyo PIYO] fuwa saku
argtry.py: error: the following arguments are required: saku

引数が一つしかないので足りないと言ってますね。

位置引数に既定値を設定するときは、nargsに'?'か'*'のどちらかを設定します。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--hoge', default='foo')
parser.add_argument('--piyo')
parser.add_argument('fuwa', nargs='?', default='ぬる')
parser.add_argument('saku')
args = parser.parse_args()
print('引数 hoge : ', args.hoge)
print('引数 piyo : ', args.piyo)
print('引数 fuwa : ', args.fuwa)
print('引数 saku : ', args.saku)

nargsにこのような設定をすると、コマンドライン引数が取れない場合にdefaultが使われるようになります。nargsのこの動作を利用して既定値を設定するわけです。

>python argtry.py ぽ
引数 hoge :  foo
引数 piyo :  None
引数 fuwa :  ぬる
引数 saku :  ぽ

>python argtry.py やほ ぽ
引数 hoge :  foo
引数 piyo :  None
引数 fuwa :  やほ
引数 saku :  ぽ

1つだけ指定したコマンドライン引数がdefaultとnargsの設定のないsakuに割り当てられ、fuwaにはdefaultの値が割り当てられました。

ちなみに、ヘルプを表示させるとこうなります。

>python argtry.py --help
usage: argtry.py [-h] [--hoge HOGE] [--piyo PIYO] [fuwa] saku

positional arguments:
  fuwa
  saku

optional arguments:
  -h, --help   show this help message and exit
  --hoge HOGE
  --piyo PIYO

既定値までは表示してくれなさそうですね。

広告

Pythonのコマンドライン引数カテゴリの投稿