Python模塊學習 - click


Click模塊

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

click是一個第三方庫,因此使用起來需要先行安裝

安裝click模塊

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

pip install click

基本使用

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

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

下列為click官方提供的例子:

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,他們的作用如下:

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

運行上面的腳本,可以通過命令指定--name,--count的值,由於我們在option中指定了prompt選項,那么如果我們執行腳本沒有傳遞name這個參數時,Click會提示我們在交互模式下輸入

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常用的參數含義:

  • 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()

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM