Python3學習(三十七):python中的click模組詳解
Click模組
click模組是Flask的作者開發的一個第三方模組,用於快速建立命令列。它的作用與Python標準庫的argparse相同,但是,使用起來更簡單。
基本使用
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()
command:使函式hello成為命令列介面在上面的例子中,函式hello接受兩個引數,分別是count和name,他們的取值從命令列中獲取,這裡我們使用了click模組中的command、option、echo,他們的作用如下:
- 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__':
更多引數請參考: http://click.pocoo.org/5/options/#choice-opts 注意:option中定義的引數名稱,那麼就需要用同名的變數進行接受。
擴充套件用法
場景一:我們限定使用者輸入的值,那麼就需要使用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()
場景三:不同的 Command
例項可以關聯到 group
中。group
下繫結的命令就成為了它的子命令,參考下面的程式碼:
@click.group()
def cli():
pass
@click.command()
def initdb():
click.echo('Initialized the database')
@click.command()
def dropdb():
click.echo('Dropped the database')
cli.add_command(initdb)
cli.add_command(dropdb)