argparseとは
Pythonをコマンドラインで実行させる際に、コマンドラインへ渡す引数を詳細に設定できるPythonのライブライのことです。
例を挙げると、以下に記載しているコマンドラインの引数部分 -h や -i にどのような値を渡すかを設定することができます。
また、オプション引数でない引数(以下の例では text.txt)の振る舞いについても設定することができます。
python argparseTest.py -h host_001 -i 192.168.22.3 text.txt
インストール
argparse は Python 2.7 、 3.2 以降は標準ライブラリとして Python 本体に同梱されているため、パッケージのインストールは不要です。
マニュアル
こちらを参照。https://docs.python.org/ja/3.7/library/argparse.html
ソース例
記述量は多いですが、一つひとつの内容は単純です。
argparseTest.py
# 1. argparseをインポート
import argparse
# 2. argparseのインスタンスを作成。引数にはヘルプ(-h)で使用する設定を与える。
parser = argparse.ArgumentParser(
prog='argparseTest.py', # プログラム名
usage='プログラムの利用方法', # プログラムの利用方法
description='このプログラムの引数説明', # 引数のヘルプの前に表示
epilog='説明おわり', # 引数のヘルプの後で表示
add_help=True, # -h/–help オプションの追加
)
# 3. 使用する引数をparser.add_argumentで設定する。
# 一度に複数の引数設定がおこなえる。
# オプション引数の使用有無、引数利用の必須化、help表示時の説明文など細かく設定できる。
# オプション引数なしで引数を指定
parser.add_argument('arg1')
# helpオプションを設定すると、引数の説明を設定、表示できる。
parser.add_argument('arg2', help='第二引数')
# requiredオプションをTrueにすると、引数の使用を必須条件にできる。
parser.add_argument('-a', required=True, help='第三引数')
#「--」と「-」の引数を設定可能
parser.add_argument('-b', '--B', help='第四引数')
# default オプションを使用すると、コマンドラインで引数設定がなかった際の設定値を指定できる。
parser.add_argument('-c', default='default hoge!', help='第五引数')
# 引数の型指定にはtypeを使う
parser.add_argument('-d', type=int, help='第六引数')
# 真偽値の利用
parser.add_argument('-e', type=bool, default=True, help='第七引数')
# 可変長のリスト形式で引数を受け取る
parser.add_argument('-f', nargs='*', help='第八引数')
# 4. 引数を解析する
args = parser.parse_args()
# 5. 引数の利用
# 引数の取り出しには add_argumentで指定した引数をargs.引数の形で指定する。
# ※ add_argument で「-」「--」の引数を指定した場合、「--」の引数を指定する (第四引数の話)
print('arg1='+args.arg1)
print('arg2='+args.arg2)
print('-a='+args.a)
print('-b,--B='+args.B)
print('-c='+args.c)
print('-d='+str(100 + args.d))
print('-e='+str(args.e))
print('-f='+str(args.f))
argparseTest.pyの実行
引数パターン色々
上記で設定した引数を指定してプログラムを実行します。今回は-cと-eは指定しないで実行します。
引数名は【ソース 3. 】のadd_argument()の第一引数で自由に設定できます。
その他の引数についてはオプション引数で指定し、指定することでさまざまな設定が行えます。(設定内容の詳細については後述します)
プログラムの実行
※ 「\」はコマンドラインを改行する際に使用する記号
$ python argparseTest.py hoge.py hoge.txt -a hoge1 --B hoge2 \
-d 1 -f HOGE1 HOGE!
実行結果
arg1=hoge.py
arg2=hoge.txt
-a=hoge1
-b,--B=hoge2
-c=default hoge!
-d=101
-e=True
-f=['HOGE1', 'HOGE!']
arg1
argparseTest.pyの最初で指定した引数「hoge.py」が渡されていることが確認できます。
オプション引数なしの引数であるため、値の省略はできない。
オプション引数とは、引数の前に -a, --argなどオプションを指定してから設定する引数のことです。
arg2
argparseTest.pyの2番目で指定した引数「hoge.txt 」が渡されていることが確認できます。
helpで指定した内容については後述する「ヘルプの表示」で確認できます。
オプション引数なしの引数なので値の省略ができない。
-a
オプション引数である。引数は 「-a hoge1」の形で指定しています。
オプション引数ではあるが、required=Trueとなっているため、値の省略はできない。
required=Trueは引数の使用を必須にするオプションです。
-b, --B
オプション引数。引数は 「-b hoge1」または「--B hoge1」の形で指定します。
注意点としては、【ソース 5. 】のargs.[引数名]で指定する[引数名]は「--」で指定した方を設定しないとエラーとなるので注意。
また、オプション引数であるが、デフォルト値の設定がないため値の省略はできない。
-c
オプション引数でかつ、デフォルト値が設定されているため、引数を省略できる。
今回の例では、引数を省略しており、デフォルト値の「default hoge!」が出力されている。
-d
オプション引数。add_argument()でtypeを指定すると引数の種類を指定できる。
今回はint型を指定している。
オプション引数でかつ、デフォルト値が設定されているため、引数を省略できる。
-e
オプション引数。add_argument()のtypeでboolを指定しているため、引数はTrueかFalseのみが設定可能となる。
オプション引数でかつ、デフォルト値が設定されているため、引数を省略できる。
今回の例では引数を省略しているため、値はデフォルト値の「 True」が出力されています。
-f
オプション引数。 add_argument()でnargs='*'を設定すると。可変調リスト型の引数を受け取ることができる。
デフォルト値が設定されていないため、引数を省略できない。
ヘルプの表示
-hまたは--helpを引数に使用すると、引数の説明が表示できる。
説明内容は、【ソース 2. 】で設定した「parser = argparse.ArgumentParser()の引数」や【ソース 3. 】で設定した「add_argumentのhelp」の値が表示される。
arg1については、helpの設定を行っていないため、引数の説明が表示されていない。
プログラム実行結果
$ python argparseTest.py -h
usage: プログラムの利用方法
このプログラムの引数説明
positional arguments:
arg1
arg2 第二引数
optional arguments:
-h, --help show this help message and exit
-a A 第三引数
-b B, --B B 第四引数
-c C 第五引数
-d D 第六引数
-e E 第七引数
-f [F [F ...]] 第八引数
説明おわり