pythonコマンドラインツールClickを素早く把握します。


前言
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()
  • --count:countはパラメータの名前
  • です。
  • default:パラメータのデフォルト値
  • type:パラメータ指定タイプ
  • help:説明文書
  • スクリプトを実行するときは、パラメータを追加します。helpで説明文書が表示されます。
    
    $ 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.
    定義済みのサブコマンドとカスタムコマンドがいくつか提供されます。
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。