CLIツールを簡単に作れるフレームワークを作ったよ! | 日常の吹き溜まり

2019年10月26日土曜日

2019-10-27T05:19:34Z Frodo CLIツールを簡単に作れるフレームワークを作ったよ!
日常の吹き溜まり
3

CLIツールを簡単に作れるフレームワークを作ったよ!

PythonでCLIツールを簡単に作れるようになるフレームワークを作ってみました! argparseって正直使いにくくないですか? groomなら、実質関数を1つ定義するだけでコマンドラインツールを作成できます。 ## インストール pypiに登録してあるので簡単! ```sh $ pip install groom ``` これで終わりです。早速使ってみましょう! ## 簡単に使ってみる さて、早速使ってみましょう。 2つの数を取って、四則演算するコマンドラインツールを作ってみます。 ```python import sys from groom import positional, optional, Dispatcher __version__ = '1.0' def calculate( num1: positional(float, "former number", required=True, var_name='N1'), num2: positional(float, "latter number", required=True, var_name='N2'), operator: optional(str, "operator name", short_name='op')='add'): if operator == 'add': print(num1 + num2) return if operator == 'sub': print(num1 - num2) return if operator == 'mul': print(num1 * num2) return if operator == 'div': print(num1 / num2) return print("unknown operator:", operator, file=sys.stderr) if __name__ == '__main__': Dispatcher( calculate, "calculate one of four arithmetic operations" ).dispatch() ``` これだけで、ヘルプの表示やコマンドライン引数の処理までができます。 生成されたヘルプメッセージはこんな感じ。 ```text calc.py: 1.0 calculate one of four arithmetic operations Usage: calc.py [-v | --version | -h | --help] calc.py params... positional parameters: N1: former number type: float required: True N1: latter number type: float required: True parameters: --operator, -op: operator name type: str required: False multiple values: False default: add ``` どうでしょうか? かなり簡単になっているのではないかと思います。 ヘルプメッセージの改善に関しては鋭意取り組み中ですので、少々お待ち頂けたらw ---- 追記 2019/10/27 groom==0.0.3a1で、ヘルプメッセージを少し改善しました。現在はこのようになります。 ```text calc.py: 1.0 calculate one of four arithmetic operations Usage: calc.py [-v | --version | -h | --help] calc.py <N1> <N2> [--operator <OPERATOR> | -op <OPERATOR>] positional parameters: N1: former number type: float required: True N2: latter number type: float required: True parameters: --operator, -op: operator name type: str required: False multiple values: False default: add ``` ---- 一応サブコマンドにも対応していまして、以下のようにすれば可能です。が、こちらも鋭意改善中です。 ```python d = Dispatcher(func, "desc") d.add_subcommand( "sub-command", Dispatcher(subfunc, "subdesc")) ``` このプロジェクトのGitHubのリポジトリは[https://github.com/frodo821/groom](https://github.com/frodo821/groom)です。issueやpull requestなど、どんどんお寄せいただけたら凄く嬉しいです。よろしくお願いします。

0 件のコメント:

コメントを投稿

;