Click模塊
click模塊是Flask的作者開發的一個第三方模塊,用於快速創建命令行。它的作用與Python標准庫的argparse相同,但是,使用起來更簡單。
click是一個第三方庫,因此使用起來需要先行安裝
安裝click模塊
使用pip命令即可完成模塊的安裝
pip install click
基本使用
Click對argparse的主要改在在於易用性,使用click模塊主要分為兩個步驟:
- 使用@click.command() 裝飾一個函數,使之成為命令行接口
- 使用@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()