share facebook facebook twitter menu hatena pocket slack

2018.11.13 TUE

PythonでCLIツールを作成するのにdocoptでパラメータのパーサー作成を自動化する

甲斐 甲

WRITTEN BY 甲斐 甲

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

http://try.docopt.org/

元記事はこちら

PythonでCLIツールを作成するのにdocoptでパラメータのパーサー作成を自動化する

甲斐 甲

甲斐 甲

2018/7にJOIN。 最近の好みはサーバレスです。なんでもとりあえず試します。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。