[Python] argparseモジュールを使って、コマンドライン引数を本格的に扱う
こんにちは、@yoheiMuneです。
以前に[Python] コマンドライン引数を扱うで
早速一番簡単な例で使ってみましょう。
これだけでも十分に使い易い(引数の存在チェックを自動的にしてくれるし、
Argparse チュートリアル — Python 3.5.1 ドキュメント
16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.5.1 ドキュメント
最後になりますが本ブログでは、Python・Swift・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
以前に[Python] コマンドライン引数を扱うで
sys.argv
を使ったコマンドライン引数の扱い方を書きましたが、今回はargparse
モジュールを使ってもっと本格的に扱う方法をブログに書きたいと思います。目次
argparseモジュールを導入する
argparse
モジュールは最初から入っているモジュールなので、pip
などでのインストールは不要です。以下のインポートを行います。import argparseこれで利用できるようになりました。
早速一番簡単な例で使ってみましょう。
argparse
モジュールは以下のように利用します。# argparser_sample.py # 引数パーサーの起動 parser = argparse.ArgumentParser() parser.parse_args()これでargparseが使えるようになりました。これだけで
--help
引数が使えるようになります。ちょっと便利ですね。$ python3 argparser_sample.py --help usage: argparser_sample.py [-h] optional arguments: -h, --help show this help message and exit以降では、引数の具体的な使い方を見ていきたいと思います。
位置引数を使う
プログラムに必須のパラメータは位置引数(ポジショナル引数, Positional Arguments)で指定することができます。具体的には以下のようなコードを書きます。# 位置引数の取得 parser = argparse.ArgumentParser() parser.add_argument("date") args = parser.parse_args() print(args.date)これで、以下のようにプログラムの第1引数に値を指定することで、それを受け取ることができます。
$ python3 argparser_sample.py 2016-05-12 2016-05-12そしてこの位置引数は必須パラメータとなるので、以下のように引数なしで起動するとエラーになります。
$ python3 argparser_sample.py usage: argparser_sample.py [-h] date argparser_sample.py: error: the following arguments are required: dateまた、ヘルプにも引数があることが表示されるようになります。
$ python3 argparser_sample.py -h usage: argparser_sample.py [-h] date positional arguments: date optional arguments: -h, --help show this help message and exit
これだけでも十分に使い易い(引数の存在チェックを自動的にしてくれるし、
args.date
で引数の値にアクセスできる)のですが、以下のようにすることで、ヘルプ文言を追加することができます。parser.add_argument("date", help="the target date for summrizing data.")これで、ヘルプを表示すると以下のようになります。
$ python3 argparser_sample.py -h usage: argparser_sample.py [-h] date positional arguments: date the target date for summrizing data. optional arguments: -h, --help show this help message and exitまたさらに、以下のように引数の型を指定することで、便利に使うことができます。
# 位置引数(型チェック指定あり) parser = argparse.ArgumentParser() parser.add_argument("square", help="display a square of a given value", type=int) args = parser.parse_args() print(args.square**2)ここでは
int
型で受け取るようになります。$ python3 argparser_sample.py 4 16そして、int型以外の引数を与えると、自動的にエラーにしてくれます。
$ python3 argparser_sample.py fourusage: argparser_sample.py [-h] square argparser_sample.py: error: argument square: invalid int value: 'four'この辺も、型チェックの実装を個別に書かなくていいのでとても便利です。
オプショナル引数を使う
オプショナル引数(Optional Arguments)を指定することで、任意のパラメータを取得することができます。具体的には以下のように実装します。# Optional引数の導入 parser = argparse.ArgumentParser() parser.add_argument("--date", help="the date for summarizing date.") args = parser.parse_args() if args.date: print("args.date is defined. date = " , args.date) else: print("args.date is undefined.")ここでは、
--date
パラメータが任意に指定することができます。# 引数指定あり $ python3 argparser_sample.py --date 2016-05-12 args.date is defined. date = 2016-05-12 # 引数指定なし $ python3 argparser_sample.py args.date is undefined.また上記の実装の場合、
--date
を指定したけど、それに続く値がない場合(以下例)はエラーにすることができます。$ python3 argparser_sample.py --date usage: argparser_sample.py [-h] [--date DATE] argparser_sample.py: error: argument --date: expected one argumentそして、ヘルプにも上記で実装したオプショナル引数が記載されます。
$ python3 argparser_sample.py -h usage: argparser_sample.py [-h] [--date DATE] optional arguments: -h, --help show this help message and exit --date DATE the date for summarizing date.
オプショナル引数(値なし)を使う
オプショナル引数は、値を指定せずに使うこともできます。具体的には以下のような実装です。# Optional引数の指定(値は指定せずオプションのみ指定) parser = argparse.ArgumentParser() parser.add_argument("--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("verbosity turned on.", args.verbose)この場合は、以下のようにプログラムを起動することができます。
$ python3 argparser_sample.py --verbose verbosity turned on. True
位置引数とオプショナル引数を併用する
位置引数とオプショナル引数は、以下のように併用することができます。# 位置引数とOptionalの併用 parser = argparse.ArgumentParser() parser.add_argument("date", help="the date for summarizing date.") parser.add_argument("--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("the date specified is ", args.date) else: print(args.date)これを以下のように実行することができます。
$ python3 argparser_sample.py 2016-05-12 --verbose the date specified is 2016-05-12 $ python3 argparser_sample.py 2016-05-12 2016-05-12
argparse
モジュールは他にも、引数の排他的指定や引数のショートハンド指定などいろいろとできます。詳細は後続の参照先をごらんください。参考資料
argparseモジュールの詳細は、以下を参照ください。Argparse チュートリアル — Python 3.5.1 ドキュメント
16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.5.1 ドキュメント
最後に
Pythonのコーディングは、このような機能を1つずつ学んで身につけていくことで着実にステップアップできるので、なかなかやりがいがあっていいです。今後も色々なPythonのことをこのブログで紹介できたらと思います。最後になりますが本ブログでは、Python・Swift・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!