Photo by Brooke Lark / Unsplash

Background

最近接觸到利用 command line來管理程式 (ex. flask-cli), 覺得蠻方便的. 所以找了一下一般python的工具有沒有類似的工具. 發現了有一個click的套件. 所以立馬來學習並且記錄一下.

Installation

$ pip3 install Click

Start

我們先看一個簡單的例子:

import click

@click.command()
def hello():
    click.echo('Hello World!')
    
if __name__ == '__main__':
    hello()

Click command line tool 透過 click.command() 來裝飾function. 那接著我們來執行程式.

$ python3 hello.py
Hello World!

感覺好像沒什麼特別的感覺. 跟平常執行程式差不多. 但是看下面的例子就會發現 Click 已經幫你裝飾好了 function.

$ python3 hello.py --help
Usage: hello.py [OPTIONS]

Options:
  --help  Show this message and exit.

Echoing

那接著有個小地方需要注意. 在上述的例子中我們利用 click.echo() 來取代 print()
原因是,Click 試圖同事解決 Python2 & Python3 編碼的問題.

Adding Parameters

要加入 cli 的參數我們需要用到 option() & argument() 這兩個裝飾器, 看以下的例子:

import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', '-n', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)

if __name__ == '__main__':
    hello()

那接著我們來執行看一下有什麼不一樣的地方. 首先看一下 --help 有什麼不一樣

$ python3 hello.py --help
Usage: hello.py [OPTIONS]

  Simple program that greets NAME for a total of COUNT times.

Options:
  --count INTEGER  Number of greetings.
  -n, --name TEXT  The person to greet.
  --help           Show this message and exit.

首先多了兩個 Options. count & name 其中 name 可以利用 n 來取代. help表示這個參數後面的解釋. def hello(count, name): 從這行code中我們可以知道 count & name 這兩個options的值最後會丟入 hello 的function中. 其中 count 的值 default 是 1. 那prompt則表示這個option你沒填入值時. 他會跳出訊息請你輸入.

那接著正式執行

$ python3 hello.py --name Paul --count 3
Hello Paul!
Hello Paul!
Hello Paul!

這樣最基本的就大致上介紹完成啦.

Reference