これまでコマンドライン引数を取得するときはsys.argv
を使ってきていた。しかし先人の書いたコードを読んでみるとargparse
が使われている。sys.argv
でなくargparse
を使う理由があるはず、ということで何が嬉しいのか考えてみた。
- 引数を付けないと
usage
を表示してくれる。sys.argv
ではIndexError: list index out of range
が発生する。
$ python arithmetic.py usage: arithmetic.py [-h] [-a] [-s] [-m] [-d] N N arithmetic.py: error: too few arguments
-h
--help
でヘルプが表示できる。
$ python arithmetic.py --help usage: arithmetic.py [-h] [-a] [-s] [-m] [-d] N N Calculate 2 integers. positional arguments: N Integers for accumlator optional arguments: -h, --help show this help message and exit -a, --addition Addition -s, --subtraction Subtraction -m, --multiplication Multiplication -d, --division Division
python スクリプト名.py Optional引数 位置指定引数
だけでなく、git add foo.py
のようなサブコマンド(ここではadd
)も作れる。
以下を参考に四則演算を行うCLIツールを作ってみた。今回は位置指定引数
とOptional引数
を使うタイプ。
16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.6.1 ドキュメント
Argparse チュートリアル — Python 3.6.1 ドキュメント
実行結果は以下のようになる。
$ python arithmetic.py -a -s -m -d 100 20 100x20=2000 100+20=120 100-20=80 100/20=5
ゼロ除算してみる。
$ python arithmetic.py -d 100 0 ZeroDivisionError
しっかり怒られる。
次回はサブコマンドで四則演算させてみようと思う。こんな感じに。
$ python arithmetic.py add 20 5 20+5=25