Python模塊學習 - click

Click模塊

click模塊是Flask的做者開發的一個第三方模塊,用於快速建立命令行。它的做用與Python標準庫的argparse相同,可是,使用起來更簡單。python

click是一個第三方庫,所以使用起來須要先行安裝安全

安裝click模塊

使用pip命令便可完成模塊的安裝ide

pip install click

基本使用

Click對argparse的主要改在在於易用性,使用click模塊主要分爲兩個步驟:函數

  1. 使用@click.command() 裝飾一個函數,使之成爲命令行接口
  2. 使用@click.option() 等裝飾函數,爲其添加命令行選項

下列爲click官方提供的例子:ui

import click

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

if __name__ == '__main__':
    hello()

在上面的例子中,函數hello接受兩個參數,分別是count和name,他們的取值從命令行中獲取,這裏咱們使用了click模塊中的command、option、echo,他們的做用以下:this

  • command:使函數hello成爲命令行接口
  • option:增長命令行選項
  • echo:輸出結果,使用echo進行輸出是爲了更好的兼容性,由於python 2中的print是個語句,python 3中的print 是一個函數

運行上面的腳本,能夠經過命令指定--name,--count的值,因爲咱們在option中指定了prompt選項,那麼若是咱們執行腳本沒有傳遞name這個參數時,Click會提示咱們在交互模式下輸入spa

PS:與argparse模塊同樣,click也會爲咱們自動生成提示信息命令行

lidaxindeMacBook-Pro:hello DahlHin$ python3 click模塊.py --help
Usage: click模塊.py [OPTIONS]

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

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

其餘參數

option最基本的用法就是經過指定命令行選項的名稱,從命令行讀取參數值,再將其傳遞給函數。option經常使用的參數含義:blog

  • default: 設置命令行參數的默認值
  • help:參數說明
  • type:參數類型,能夠是string、int、float等
  • prompt:當在命令行中沒有輸入相應的參數時,會更具prompt提示用戶輸入
  • nargs:指定命令行參數接受的值的個數
  • required:是否爲必填參數
import click

@click.command()
@click.option('--pos',nargs=2,type=float)

def getfloat(pos):
    click.echo('%s / %s' % pos )

if __name__ == '__main__':
    getfloat()

注意:option中定義的參數名稱,那麼就須要用同名的變量進行接受。接口

更多參數請參考: http://click.pocoo.org/5/options/#choice-opts 

擴展用法

場景一:咱們限定用戶輸入的值,那麼就須要使用Click模塊中的Choice函數,Choice的參數是一個列表,該列表中列出全部可能的值。

import click

@click.command()
@click.option('-c',required=True,type=click.Choice(['start','stop']))   # 限定-c的值爲start,或者stop,required表示是否爲必填參數
def getcommand(c):
    click.echo('command is %s' % c )

if __name__ == '__main__':
    getcommand()

場景二:應用程序從命令行讀取密碼。 

使用標準庫中的argparse模塊只能像輸入普通參數同樣輸入密碼。這種方式存在必定安全隱患,例如輸入的密碼會保存在history中,查看命令歷史列表就能獲取密碼

在Click中,這個問題就能完美的解決,只須要是這prompt爲True,那麼咱們就能交互式輸入密碼,設置hide_input爲True,就能隱藏密碼,設置confirmation_prompt爲True,就能夠進行密碼的兩次驗證,使用起來很是便捷。

import click

@click.command()
@click.option('-p',prompt='Your Password',hide_input=True,confirmation_prompt=True)

def getpassword(p):
    click.echo('Your Password is : %s' % p)

if __name__ == '__main__':
    getpassword()
相關文章
相關標籤/搜索