概要
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でブラウザ上で動作検証をすることができます。ぜひお試しあれ^^