PythonでCLIツールを作成するのにdocoptでパラメータのパーサー作成を自動化する
概要
Unity ML-Agentsを利用していて、CLIの実装にdocoptというモジュールを利用していて、パラメータのバリデーションをいい感じにやってくれて便利そうだったので、お試ししてみました。
docopt…
http://docopt.org/
使い方
上記サイトをみたらわかると思いますが、CLIのドキュメントをインターフェース定義として、パラメータのパーサーを自動的に定義してくれるみたいです。素敵。
docopt helps you:
・ define the interface for your command-line app, and
・ automatically generate a parser for it.
試しにCLIツールを実装してみます。
仮想環境を作成するか、Dockerを利用するかなどはお好みで。
> mkdir 任意のディレクトリ > cd 任意のディレクトリ > python -m venv venv > . venv/bin/activate > pip install docopt > touch hoge.py
hoge.py
from docopt import docopt if __name__ == '__main__': _USAGE = ''' 実行しても何もしないツール Usage: hoge run <name> [--foo=<n>] hoge -h | --help Options: -h --help ヘルプを表示 --foo=<n> よくわからないオプション [default: 3] ''' params = docopt(_USAGE) print(params)
はい。
実際に実行してみます。
> python hoge.py Usage: hoge run <name> [--foo=<n>] hoge -h | --help
> python hoge.py run Usage: hoge run <name> [--foo=<n>] hoge -h | --help
> python hoge.py run hoge {'--foo': '3', '--help': False, '<name>': 'hoge', 'run': True}
> python hoge.py run hoge --foo 50 {'--foo': '50', '--help': False, '<name>': 'hoge', 'run': True}
> python hoge.py run hoge --foo=100 {'--foo': '100', '--help': False, '<name>': 'hoge', 'run': True}
> python hoge.py --help 実行しても何もしないツール Usage: hoge run <name> [--foo=<n>] hoge -h | --help Options: -h --help ヘルプを表示 --foo=<n> よくわからないオプション [default: 3]
Usageに書いているとおりにパラメータ指定がされていないと弾いてくれます。
まとめ
自前でパーサーを実装すると地味に手間がかかるので、ドキュメントからパーサーを自動生成してくれて、とても素敵です。
実装して確認するのが、面倒!ってときは下記URLでブラウザ上で動作検証をすることができます。ぜひお試しあれ^^