click模塊是Flask的做者開發的一個第三方模塊,用於快速建立命令行。它的做用與Python標準庫的argparse相同,可是,使用起來更簡單。python
click是一個第三方庫,所以使用起來須要先行安裝安全
使用pip命令便可完成模塊的安裝ide
pip install click
Click對argparse的主要改在在於易用性,使用click模塊主要分爲兩個步驟:函數
下列爲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
運行上面的腳本,能夠經過命令指定--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
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()