Pythonのコマンドライン引数に既定値を設定する(argparse編)
Pythonのargparseモジュールで設定するコマンドライン引数に、既定値を設定します。
目次
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
既定値までは表示してくれなさそうですね。
公開日
広告