【python】argparserでコマンドライン引数を解析する
argparser
16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.6.5 ドキュメント
argparser
はpython標準モジュールの一つで、pythonスクリプト実行時に受け取ったコマンドライン引数を解析するのに役立ちます。
例えば、ls
コマンドのように、引数無しで実行することもできれば、引数やオプションを与えることで挙動が変更するようなスクリプトを記述することができます。またargparser
を用いることで、デフォルトでヘルプメッセージを実装することができます。
Usage
基本形
argparser
を利用する基本形は以下になります。
import argparse parser = argparse.ArgumentParser("起動時メッセージ") args = parser.parse_args()
argparse
モジュールをインポートし、argparse.ArgumentParser
クラスのインスタンスを生成するだけです。これでコマンドライン引数を解析する準備が整いました。
以降、解析したコマンドライン引数はparse_args()
メソッドで取得することができます。
また、parse_args()
メソッドを呼び出した時点でスクリプトのヘルプコマンドが使えるようになります。
$ python hoge.py --help usage: 起動時メッセージ [-h] optional arguments: -h, --help show this help message and exit
必須コマンドライン引数の追加
引数の追加
引数の追加は、argparse.ArgumentParser
インスタンスのadd_argument()
メソッドを用いて行います。
import argparse parser = argparse.ArgumentParser("起動時メッセージ") parser.add_argument("arg1") args = parser.parse_args()
add_argument()
で追加した文字列は、コマンドライン引数のラベルとして扱われます。ラベルは追加された順に割り当てられます。
$ python hoge.py --help usage: 起動時メッセージ [-h] arg1 positional arguments: arg1 optional arguments: -h, --help show this help message and exit # 引数がないとエラー = 必須な引数 $ python hoge.py usage: 起動時メッセージ [-h] arg1 起動時メッセージ: error: the following arguments are required: arg1 # arg1が第一引数のラベルとして自動的に割り当てられる $ python hoge.py a Namespace(arg1='a')
引数の参照
引数への参照は、通常のオブジェクトのようにプロパティアクセスで可能です。
parser = argparse.ArgumentParser("起動時メッセージ") parser.add_argument("arg1") args = parser.parse_args() print(args.arg1)
$ python hoge.py 100 100
ヘルプメッセージ
add_argument()
の引数help
にはヘルプ表示時のメッセージを設定することができます。
parser.add_argument("arg1", help="arg1のヘルプメッセージ")
$ python hoge.py --help usage: 起動時メッセージ [-h] arg1 positional arguments: arg1 arg1のヘルプメッセージ optional arguments: -h, --help show this help message and exit
引数の型指定
引数には値の型も指定することができます。引数である文字列値を、指定された型にキャストしてくれます。
parser.add_argument("arg1", help="arg1のヘルプメッセージ", type=int)
# NG $ python hoge.py hoge usage: 起動時メッセージ [-h] arg1 起動時メッセージ: error: argument arg1: invalid int value: 'hoge' # OK $ python hoge.py 100 Namespace(arg1=100)
Optional引数
上記の引数は必ず指定しなければならないものでしたが、
引数名の頭に--
を付加することで任意引数とすることができます。
parser.add_argument("--arg1", help="arg1のヘルプメッセージ", type=int)
ただしoptional引数の場合、引数値の前に必ずラベルを明示する必要があります。
# optional引数は指定しなくても良い $ python hoge.py Namespace(arg1=None) # ただし、指定する際はラベルが必要 $ python hoge.py 100 usage: 起動時メッセージ [-h] [--arg1 ARG1] 起動時メッセージ: error: unrecognized arguments: 100 $ python hoge.py --arg1 100 Namespace(arg1=100)
optional引数の短縮形
多くのシェルコマンドと同様に、オプション指定の短縮形も設定することができます。
parser.add_argument("-a", "--arg1", help="arg1のヘルプメッセージ", type=int)
# OK $ python hoge.py Namespace(arg1=None) # OK $ python hoge.py --arg1 100 Namespace(arg1=100) # OK $ python hoge.py -a 100 Namespace(arg1=100)
argparser
はpythonコマンドラインパーサの基本形です。
慣れれば意外と使いやすいですし、何より標準なのでユーザに余計なパッケージを要求しないので一定の制約下では重宝します。
よりシンプルなコマンドラインパーサであるclickなどもおすすめなので、ぜひ使ってみることをおすすめします。
参考
16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.6.5 ドキュメント