成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開發命令行工具的十個 Click 庫高級參數

開發
在這篇文章里,我們介紹了利用 Click 構建命令行工具時可以運用到的十個高級特性。

今天就來跟大家聊聊,如何用Click庫開發命令行工具的10個高級參數。一步步來,咱們先從簡單的開始,再到更高級的功能。

1. 定義基本命令

首先,使用Click庫,我們要定義一個最基本的命令。這是一個入門的例子。

# 導入click庫
import click

# 定義一個點擊裝飾器
@click.command()
# 定義函數處理程序邏輯
def hello():
    """簡單的命令,輸出Hello"""
    click.echo("Hello!")

# 主函數調用
if __name__ == '__main__':
    hello()

運行輸出:

Hello!

這里 click.echo() 是Click推薦使用的打印方式。它比標準 print 更加靈活和強大,尤其是涉及到Unicode或不同平臺間的兼容性問題時。

2. 添加簡單參數

現在我們往這個簡單的命令中加入一個可以輸入的名字參數。

import click

@click.command()
@click.argument('name')  # 使用參數
def greet(name):
    """接收name參數,打印個性化問候"""
    click.echo(f"Hello, {name}!")

if __name__ == '__main__':
    greet()

示例運行:

$ python app.py Alice
Hello, Alice!

這一步中,@click.argument('name') 這句代碼,允許命令行后面直接添加參數。

3. 帶類型的選項

我們可以給我們的命令行加入更多選擇項,并且指定這些項應該是什么樣的數據類型。

import click

@click.command()
@click.option('--age', type=int, help="Your age in years.")  # 聲明age選項,要求為int類型
def display(age):
    """顯示年齡"""
    click.echo(f"Your entered age is: {age}")

if __name__ == '__main__':
    display()

運行:

$ python app.py --age 26
Your entered age is: 26

這樣,通過 --age 參數指定用戶的年齡,并在運行時得到反饋。

4. 默認值與幫助文本

接著,讓我們看看如何為選項設置默認值和幫助信息,這樣可以讓用戶更容易地了解命令該如何使用。

import click

@click.command()
@click.option('--temperature', default=20, help="Room temperature in degrees Celsius.")
def adjust_temp(temperature):
    """調整溫度設置"""
    click.echo(f"The current room temperature is set to: {temperature}°C")

if __name__ == '__main__':
    adjust_temp()

輸出結果(無指定值):

The current room temperature is set to: 20°C

5. 強制用戶確認

有些操作可能有破壞性,比如刪除文件之類的,那就可以加上用戶必須的交互確認了。

import click

@click.command()
@click.confirmation_option(prompt='Are you sure you want to proceed?')
def danger():
    """需要用戶確認的操作"""
    click.echo("Action performed!")

if __name__ == '__main__':
    danger()

在這個腳本執行時,如果未輸入 yes 或 y,則該命令不會生效。

6. 接受多種輸入模式的值

如果你有一些選項是可以接受多個值的,比如說顏色列表,也可以很方便實現。

import click

@click.command()
@click.option('--colors', multiple=True, help="List of colors")
def show_colors(colors):
    """展示所有提供的顏色"""
    for color in colors:
        click.echo(f"You chose the color: {color}")

if __name__ == '__main__':
    show_colors()

運行示例:

$ python app.py --colors red --colors green
You chose the color: red
You chose the color: green

7. 文件讀取和寫入支持

很多時候命令行需要處理文件輸入或者輸出。

import click

@click.command()
@click.argument('input_file', type=click.File('r'))
@click.argument('output_file', type=click.File('w'))
def copy(input_file, output_file):
    """拷貝內容至另一文件"""
    output_file.write(input_file.read())
    click.echo('File copied successfully!')

if __name__ == '__main__':
    copy()

這個腳本將讀取第一個文件的內容,將其拷貝到另一個文件。

8. 組合多命令

有時候,一個命令行工具需要很多子命令。比如 git add, git commit 等等。

import click

@click.group()
def cli():
    """主組"""

@cli.command()
def initdb():
    click.echo('Initialized the database')

@cli.command()
def dropdb():
    click.echo('Dropped the database')

if __name__ == '__main__':
    cli()

在這里使用 @click.group() 可以讓我們輕松定義一組子命令。

9. 回調機制與驗證

如果需要對用戶提供信息進行驗證,也可以很容易完成:

import click

def validate_age(ctx, param, value):
    try:
        if value < 0:
            raise ValueError
        return value
    except ValueError:
        raise click.BadParameter('Age must be a non-negative integer.')

@click.command()
@click.option('--age', callback=validate_age, type=int)
def process(age):
    """驗證年齡正確性"""
    click.echo(f"Processed your valid age: {age}")

if __name__ == '__main__':
    process()

當年齡不是正數或非整數時候將會提示用戶錯誤信息。

10. 實際場景 - 文件查找器

下面是一個綜合的小案例,創建一個能夠遞歸搜索特定目錄下符合某種擴展名文件的應用程序:

import os
import click

def find_files(dir, ext):
    """實際查找文件方法"""
    results = []
    for dirpath, dirnames, filenames in os.walk(dir):
        for filename in filenames:
            if filename.endswith(ext):
                results.append(os.path.join(dirpath, filename))
    return results

@click.command()
@click.option('-d', '--dir', required=True, type=click.Path(exists=True), help='Directory to search.')
@click.option('-e', '--ext', required=True, help='File extension.')
def finder(dir, ext):
    """命令行應用:尋找擴展名為EXT的文件"""
    files = find_files(dir, ext)
    if not files:
        click.echo('No matching files found.')
    else:
        for file in files:
            click.echo(file)

if __name__ == '__main__':
    finder()

這段程序會基于給出的目錄和擴展名去尋找相關聯的文件,并把它們打印出來。

總結

在這篇文章里,我們介紹了利用Click構建命令行工具時可以運用到的十個高級特性。這些包括但不限于定義基礎命令,參數管理,選項配置如指定類型、提供默認值、強制確認、處理多重輸入以及文件輸入輸出功能。還涉及組合型子命令的設計、數據校驗回調,最后結合所學到的知識構建了一個實用的小型遞歸文件搜素器示例。

責任編輯:趙寧寧 來源: 手把手PythonAI編程
相關推薦

2023-04-28 19:44:31

shell腳本命令

2015-09-29 16:03:43

2015-09-28 11:22:55

命令行補全Linux

2023-10-30 01:00:42

Go語言Cobra庫

2020-12-10 16:16:08

工具代碼開發

2020-12-11 06:44:16

命令行工具開發

2022-11-07 16:06:15

TypeScript開發技巧

2022-04-05 00:18:33

工具終端命令行

2022-07-13 08:21:38

開源命令行工具Linux

2021-01-13 05:29:26

命令行

2019-06-10 15:00:27

node命令行前端

2018-05-04 09:15:35

PythonPlumbum命令行

2022-03-10 08:44:50

Python開發工具

2019-11-06 19:21:07

Pythonargparse解釋器

2021-11-08 10:45:07

Python命令工具

2019-02-27 09:24:48

命令行文件Linux

2014-02-18 10:45:48

2010-08-24 09:10:14

Linux命令行工具

2014-04-09 11:05:11

2020-03-30 12:57:50

Linux命令行Markdown
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人小视频在线观看 | 日本视频一区二区 | 亚洲视频免费 | av片在线观看网站 | 国产免费视频在线 | 欧洲av在线 | 久久精品一级 | 亚洲日本中文字幕在线 | 精品国产视频在线观看 | 成人精品鲁一区一区二区 | 精品国产一区二区三区久久久久久 | 亚洲国产视频一区二区 | 免费人成在线观看网站 | 精品久久久久久久久久久 | 97成人在线 | 国产精品久久久一区二区三区 | 国产精品亚洲欧美日韩一区在线 | 在线观看www | 日本久久综合 | 精品国产精品一区二区夜夜嗨 | 超碰520| 91一区二区 | 伊人久久综合影院 | 人人鲁人人莫人人爱精品 | 国产高清久久 | 国产欧美一区二区三区免费 | 婷婷福利视频导航 | 在线成人av| 成人黄色电影在线观看 | 亚洲人成在线播放 | 欧美日韩一区不卡 | 欧美亚洲激情 | 精品久久久久久久 | 中文字幕在线电影观看 | 亚洲精品一区二三区不卡 | 福利片在线 | 日韩精品在线播放 | 综合精品久久久 | 午夜www| 人人干天天干 | 青青草av网站 |