博文作者 wangzirui32
喜歡的可以 點贊 收藏 關注哦~~
本文首發於CSDN,未經許可禁止轉載hello,大家好,我是wangzirui32,今天我們來學習click模塊開發命令行應用,開始學習吧!
click簡介如下(引自官方文檔):
安裝命令如下:
pip install click
確認安裝無誤後,即可開始學習。創建hello.py
,寫入代碼:
import click
# 命令組
group = click.Group()
# 定義hello命令
@click.command("hello")
def hello():
click.echo("Hello User ! Welcome !")
# 添加hello命令
group.add_command(hello)
group.main() # 啟用組內命令
我們來逐步解析代碼:
import click
導入click模塊group = click.Group()
定義了命令組group
,它用來存儲程序中定義的命令。@click.command("hello")
這是一個裝飾器,"hello"
代表其命令名稱。def hello():
定義hello
函數。click.echo("Hello User ! Welcome !")
輸出問候消息,這裡使用了click.echo
輸出,據官方文檔介紹,這個函數比原來的print
更強大,支持更多輸出功能,推薦使用。group.add_command(hello)
把hello
命名添加到命令組裡。group.main()
啟用組內所添加的命令。我們來看看效果:
PS D:\Python> python hello.py hello
Hello User ! Welcome !
看到我們輸入了python hello.py hello
表示調用hello.py
中的hello
命名,之後就輸出了問候語。
還是剛才的例子,只不過代碼有些改動:
import click
group = click.Group()
@click.command("hello")
@click.option("--username") # 加入參數username
def hello(username): # 函數參數加入username
# 輸出對username的問候語
click.echo("Hello {}! Welcome!".format(username))
group.add_command(hello)
if __name__ == '__main__':
group.main()
效果如下:
PS D:\Python> python hello.py hello --username Malfoy
Hello Malfoy! Welcome!
在上面的例子中,我們加入了參數username
,來看看關鍵的這一行代碼@click.option("--username")
,它表示為命令添加一個名為username
的參數,其在命令行中指定方式為--username
。
當然,這個裝飾器還有其他的參數,我們接著看下面的例子:
import click
group = click.Group()
@click.command("hello")
@click.option("--username", default="wangzirui32", help="用戶名")
@click.option("--email", prompt="你的郵箱: ", help="郵箱")
@click.option('--password', prompt=True,
hide_input=True, confirmation_prompt=True, help="密碼")
def hello(username, email, password):
click.echo("Hello {}! Welcome! Your email is {}".format(username, email))
click.echo("Password: {}".format(password))
group.add_command(hello)
if __name__ == '__main__':
group.main()
效果如下:
PS D:\Python>python hello.py hello --email [email protected]***.com
Password:
Repeat for confirmation:
Hello wangzirui32! Welcome! Your email is [email protected]***.com
Password: 123456
我們來解析其中的3條代碼:
@click.option("--username", default="wangzirui32", help="用戶名")
在這行代碼裡,我們指定了username
的默認參數和它的幫助信息,可以通過--help
命令查看。@click.option("--email", prompt="你的郵箱: ", help="郵箱")
在這行代碼裡,我們指定了prompt
參數,表示我們如果在命令行裡沒有指定email
,就在程序運行時輸出提示語提示輸入。@click.option('--password', prompt=True,hide_input=True, confirmation_prompt=True, help="密碼")
這行代碼指定了密碼參數,prompt=True
允許程序運行時輸出提示語提示輸入,hide_input
隱藏輸入,confirmation_prompt=True
要求校驗之前輸入的密碼,最後指定幫助信息,其實等價於代碼click.password_option()
。click
中的一大亮點,訪問幫助可以使用--help
,示例如下:PS D:\Python> python hello.py hello --help
Usage: hello.py hello [OPTIONS]
Options:
--username TEXT 用戶名
--email TEXT 郵箱
--password TEXT 密碼
--help Show this message and exit.
PS D:\Python> python hello.py --help
Usage: hello.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
hello
這個裝飾器還有其他的參數,這裡不多說,筆者已將它整理成如下表格:
先來看看例子,Code:
import click
group = click.Group()
@click.command("hello")
@click.option("--fruit", type=click.Choice(['apple', 'orange', 'grapes'])) # 定義為選擇參數
def hello(fruit):
click.echo("水果:{}".format(fruit))
group.add_command(hello)
if __name__ == '__main__':
group.main()
運行效果:
PS D:\Python> python hello.py hello --fruit apple
水果:apple
這裡使用了click.Choice
傳入選項列表,再將其以參數type
傳入click.option
,就完成了,如果輸入了不在選項列表裡的值,程序會報錯。
上面我們介紹了click.echo
的輸出方式,但在click
裡還有另一種輸出函數click.secho
,來看代碼:
import click
group = click.Group()
@click.command("hello")
def hello():
click.secho("Hello!", fg="green")
click.secho("你好!", fg="red")
group.add_command(hello)
if __name__ == '__main__':
group.main()
輸出:click.secho
可以輸出帶有顏色的文字,其實這段代碼等價於:
click.echo(click.style("Hello!", fg="green"))
click.echo(click.style("你好!", fg="red"))
其效果是一樣的。
好了,今天的課程就到這裡,我是wangzirui32,喜歡的可以點個收藏和關注,我們下次再見!