程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python】click模塊開發命令行應用

編輯:Python

博文作者 wangzirui32
喜歡的可以 點贊 收藏 關注哦~~
本文首發於CSDN,未經許可禁止轉載


hello,大家好,我是wangzirui32,今天我們來學習click模塊開發命令行應用,開始學習吧!

目錄

  • 1. click
  • 2. Hello World 第一個示例
  • 3. click.option裝飾器
  • 4. click.Choice 選擇參數
  • 5. click.secho 輸出

1. click

click簡介如下(引自官方文檔):

安裝命令如下:

pip install click

2. Hello World 第一個示例

確認安裝無誤後,即可開始學習。創建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() # 啟用組內命令

我們來逐步解析代碼:

  1. import click導入click模塊
  2. group = click.Group()定義了命令組group,它用來存儲程序中定義的命令。
  3. @click.command("hello")這是一個裝飾器,"hello"代表其命令名稱。
  4. def hello():定義hello函數。
  5. click.echo("Hello User ! Welcome !")輸出問候消息,這裡使用了click.echo輸出,據官方文檔介紹,這個函數比原來的print更強大,支持更多輸出功能,推薦使用。
  6. group.add_command(hello)hello命名添加到命令組裡。
  7. group.main()啟用組內所添加的命令。

我們來看看效果:

PS D:\Python> python hello.py hello
Hello User ! Welcome !

看到我們輸入了python hello.py hello表示調用hello.py中的hello命名,之後就輸出了問候語。

3. click.option裝飾器

還是剛才的例子,只不過代碼有些改動:

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條代碼:

  1. @click.option("--username", default="wangzirui32", help="用戶名")在這行代碼裡,我們指定了username的默認參數和它的幫助信息,可以通過--help命令查看。
  2. @click.option("--email", prompt="你的郵箱: ", help="郵箱")在這行代碼裡,我們指定了prompt參數,表示我們如果在命令行裡沒有指定email,就在程序運行時輸出提示語提示輸入。
  3. @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

這個裝飾器還有其他的參數,這裡不多說,筆者已將它整理成如下表格:

參數名稱參數介紹default指定默認值help指定幫助信息type指定參數的數據類型(如str,float)required是否為必填選項,True為必填prompt在命令行提示用戶輸入對應選項的信息nargs指定此命令接收參數的數量,超過會報錯

4. click.Choice 選擇參數

先來看看例子,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,就完成了,如果輸入了不在選項列表裡的值,程序會報錯。

5. click.secho 輸出

上面我們介紹了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,喜歡的可以點個收藏和關注,我們下次再見!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved