pythonコマンドラインツールClickを素早く把握します。
前言
Pythonを書くときはよくコマンドラインツールを書きます。標準ライブラリはコマンドライン解析ツールArgparseを提供していますが、書くのが面倒くさいので、あまり使いません。コマンドラインツールの中で一番爽やかなのがClickです。Flaaskのチームパスのオープンソースです。Clickは少ないコードであれば、コマンドラインツールを作成する過程が速くて面白いように、優雅にコマンドラインツールを作成することができます。
百聞は一見に如かず
インストール
click_を作成しますdemo.py、最も簡単な関数を書きます。
パラメータ
デコラclick.option()はコマンドライン関数にパラメータを指定できます。--count:countはパラメータの名前 です。 default:パラメータのデフォルト値 type:パラメータ指定タイプ help:説明文書 スクリプトを実行するときは、パラメータを追加します。helpで説明文書が表示されます。
いくつかのコマンドラインツールは、実行時にユーザに情報を入力するように要求します。
Clickの重要な特性は、そのパケット機能です。コマンドラインツールの論理が非常に複雑になったとき、結合を解除するためには、異なる論理を異なるコマンドに置く必要があります。これにより、単一のコマンドラインツール関数の肥大化を回避することができます。例を見てみます
@click.group装飾器は、関数をGroupオブジェクトに飾り、Groupによって多くのサブコマンドを追加することができます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
Pythonを書くときはよくコマンドラインツールを書きます。標準ライブラリはコマンドライン解析ツールArgparseを提供していますが、書くのが面倒くさいので、あまり使いません。コマンドラインツールの中で一番爽やかなのがClickです。Flaaskのチームパスのオープンソースです。Clickは少ないコードであれば、コマンドラインツールを作成する過程が速くて面白いように、優雅にコマンドラインツールを作成することができます。
百聞は一見に如かず
インストール
pip install Click
使用click_を作成しますdemo.py、最も簡単な関数を書きます。
import click
@click.command()
def hello():
click.echo('Hello World!')
if __name__ == '__main__':
hello()
実行:
python click_demo.py
Hello World!
装飾器click.co mmand()は、関数秒をコマンドラインツールに変化させ、echo関数の役割はprint関数に等しいです。パラメータ
デコラclick.option()はコマンドライン関数にパラメータを指定できます。
import click
@click.command()
@click.option("--count", default=1, help=" ", type=int)
def hello(count):
"""
"""
for i in range(count):
click.echo('Hello World!')
if __name__ == '__main__':
hello()
$ python click_demo.py --help
Usage: click_demo.py [OPTIONS]
Options:
--count INTEGER
--help Show this message and exit.
パラメータを指定:
>python click_demo.py --count 3
Hello World!
Hello World!
Hello World!
promptいくつかのコマンドラインツールは、実行時にユーザに情報を入力するように要求します。
import click
@click.command()
@click.option("--count", default=1, help=" ", type=int)
@click.option("--name", prompt=" ", help=" ")
def hello(count, name):
"""
"""
for i in range(count):
click.echo(f'Hello {name}!')
if __name__ == '__main__':
hello()
$ python click_demo.py
: lzjun
Hello lzjun!
グループClickの重要な特性は、そのパケット機能です。コマンドラインツールの論理が非常に複雑になったとき、結合を解除するためには、異なる論理を異なるコマンドに置く必要があります。これにより、単一のコマンドラインツール関数の肥大化を回避することができます。例を見てみます
# db.py
import click
@click.group()
def db():
pass
@click.command()
@click.option("--name", help=" ")
def add(name):
"""
:param name:
:return:
"""
click.echo(f'add user {name}')
@click.command()
@click.option("--id", help=" ")
def delete(id):
"""
:param id:
:return:
"""
click.echo(f'delete user {id}')
db.add_command(delete)
db.add_command(add)
if __name__ == '__main__':
db()
これは、データベースDBを操作するコマンドラインツールであり、追加ユーザや削除ユーザのコマンドラインなどの他の操作を提供していますが、全てのサービスロジックを一つの関数に書いておくと、メンテナンスが非常に難しくなります。@click.group装飾器は、関数をGroupオブジェクトに飾り、Groupによって多くのサブコマンドを追加することができます。
python db.py --help
Usage: db.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
add :param name: :return:
delete :param id: :return:
ヘルプドキュメントからaddとdeleteは二つのサブコマンドです。FlashkフレームのflashkコマンドもGroupコマンドです。
$ flask
Usage: flask [OPTIONS] COMMAND [ARGS]...
A general utility script for Flask applications.
Provides commands from Flask, extensions, and the application. Loads the
application defined in the FLASK_APP environment variable, or from a
wsgi.py file. Setting the FLASK_ENV environment variable to 'development'
will enable debug mode.
$ export FLASK_APP=hello.py
$ export FLASK_ENV=development
$ flask run
Options:
--version Show the flask version
--help Show this message and exit.
Commands:
add_user :param name: :param username: :param password:...
init_invite_code
recommend_account
routes Show the routes for the app.
run Runs a development server.
shell Runs a shell in the app context.
定義済みのサブコマンドとカスタムコマンドがいくつか提供されます。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。