1. 程式人生 > 其它 >Python 命令列引數解析之 Click

Python 命令列引數解析之 Click

Python筆記:命令列引數解析中介紹了sys.argv、getopt 和 argparse三種命令列引數解析方法,今天來分享另外一個python命令列工具click,它是用來支援 Web開發框架 Flask的,都由Pallets 專案組織開發。

目錄

click簡介

click相比於其他命令列工具的一個優勢就是支援多個命令的巢狀和組合,主要包含以下特性:(摘自:為什麼用 Click?

  • 沒有限制可以簡單組合
  • 完全遵循 Unix 命令列約定
  • 支援從環境變數中載入值
  • 支援特定值的提示
  • 充分地可巢狀可組合
  • 相容python 2 和 3
  • 支援外部檔案處理
  • 與一些常用的工具幫手結合 (獲得 terminal 大小, ANSI 字元顏色, 直接輸入按鍵, 螢幕清理, 獲取 config 路徑, 啟動 apps 和 editors, 等。)

選項設定

下面使用click來實現文章Python筆記:命令列引數解析中的命令列,可以對比一下它們的差異。

import click

@click.command()
@click.option('--field', '-f', help='欄位', multiple=True)
# @click.option('--display-filter', '-Y', prompt='display-filter', nargs=2, help='條件')
@click.option('--display-filter', '-Y', prompt='display-filter', type=(str, int, float, bool), help='條件')
@click.option('--count', '-c', default=2, prompt='count', help='條件')
def cli(field, display_filter,count):
    """Simple program that greets NAME for a total of COUNT times."""

    click.echo(f'{field} {display_filter} {count}')

if __name__ == '__main__':
    cli()

可以看到,click使用裝飾器@click.command()將cli()方法包裝成 click 物件,然後使用@click.option來新增選項引數,下面來介紹這些引數的含義。

基本選項

預設第一個引數為長選項,help引數用於設定選項的描述資訊:

$ python3 test_click.py --help
Usage: test_click.py [OPTIONS]

  Simple program that greets NAME for a total of COUNT times.

Options:
  -f, --field TEXT                欄位
  -Y, --display-filter <TEXT INTEGER FLOAT BOOLEAN>...
                                  條件
  -c, --count                     計數
  --help                          Show this message and exit.

也可以使用help_option方法修改help選項顯示資訊:

@click.help_option('--help', '-h', help='幫助資訊')
  • default引數:設定選項預設值

  • type:設定引數型別

  • prompt:設定提示資訊,設定prompt=true或者prompt=提示資訊後,如果沒有設定引數,會出現提示,預設關閉。

多個選項和選項多個值

1、選項可以設定多個值,可以通過兩種方式:

  • 通過 nargs 引數來配置。多個值將被放入一個元組(tuple)中,只支援固定數量的引數。

  • 使用type引數設定不同型別的值:type=(str, int, float, bool)

2、multiple=True允許多個選項賦值:

一個引數傳遞多次,並且記錄每次的值

$ python3 test_click.py -f tcp -f udp -Y ip.version==4 -c 1 
('tcp', 'udp') ip.version==4 1

密碼提示

Click 支援隱藏輸入資訊和確認,比如輸入密碼時隱藏內容,也可以直接用 password_option()裝飾器:

import click

@click.command()
@click.option('--password', '-p', prompt=True, hide_input=True, confirmation_prompt=True)
# @click.password_option('--password', '-p', prompt=True, hide_input=True, confirmation_prompt=True)
def cli(password):
    click.echo(f'the password is {password}')    

if __name__ == '__main__':
    cli()

執行:

$ python test_click.py
Password:
Repeat for confirmation:
the password is 123456

$ python test_click.py -p 123456
the password is 123456

總結

Click相比argparse使用起來更加簡潔,可以實現快速構建命令列程式,當然在擴充套件性上就沒有argparse庫好。本文只介紹了click的部分功能,更詳細的用法可參考:

  1. click庫官方文件:https://click.palletsprojects.com/en/8.0.x/
  2. click庫中文文件:https://click-docs-zh-cn.readthedocs.io/zh/latest/
--THE END--