PythonでCLIツールを簡単に作れるようになるフレームワークを作ってみました!
argparseって正直使いにくくないですか?
groomなら、実質関数を1つ定義するだけでコマンドラインツールを作成できます。
pypiに登録してあるので簡単!
$ pip install groom
これで終わりです。早速使ってみましょう!
さて、早速使ってみましょう。
2つの数を取って、四則演算するコマンドラインツールを作ってみます。
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()
これだけで、ヘルプの表示やコマンドライン引数の処理までができます。
生成されたヘルプメッセージはこんな感じ。
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で、ヘルプメッセージを少し改善しました。現在はこのようになります。
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
一応サブコマンドにも対応していまして、以下のようにすれば可能です。が、こちらも鋭意改善中です。
d = Dispatcher(func, "desc")
d.add_subcommand(
"sub-command",
Dispatcher(subfunc, "subdesc"))
このプロジェクトのGitHubのリポジトリはhttps://github.com/frodo821/groomです。issueやpull requestなど、どんどんお寄せいただけたら凄く嬉しいです。よろしくお願いします。
Pythonをこよなく愛するプログラマ。広く浅くアンテナを張っている(つもり)。 出来ることと言えばフロントエンド全般やJava、Kotlinを使ったアプリ開発、PHP/Pythonでバックエンドが少々にC#、Python、Java、Kotlin、Scalaなどを使ったデスクトップ開発くらいのもの。PyPIで自作ライブラリ公開したりもしている。https://pypi.org/project/rattlepy/ https://pypi.org/project/groom/ 好きなフロントエンドフレームワークはReact、バックエンドフレームワークはCodeIgniterとMasonite。自分のサイトもReactを使って構築した。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント