日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

c2665 “initgraph”: 2 个重载中没有一个可以转换所有参数类型_Python 命令行之旅:深入 click 之参数篇...

發布時間:2025/4/16 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c2665 “initgraph”: 2 个重载中没有一个可以转换所有参数类型_Python 命令行之旅:深入 click 之参数篇... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:HelloGitHub-Prodesire

文中涉及的示例代碼,已同步更新到 HelloGitHub-Team 倉庫

一、前言

在上一篇文章中,我們初步掌握了 click 的簡單用法,并了解到它與 argparse 和 docopt 的不同。接下來,將深入介紹 click 的各類用法,以讓你能輕松打造復雜的命令行程序。

在概念上, click 把命令行分為 3 個組成:參數、選項和命令。

  • 參數 就是跟在命令后的除選項外的內容,比如 git add a.txt 中的 a.txt 就是表示文件路徑的參數
  • 選項 就是以 - 或 -- 開頭的參數,比如 -f、--file
  • 命令 就是命令行的初衷了,比如 git 就是命令,而 git add 中的 add 則是 git 的子命令
本系列文章默認使用 Python 3 作為解釋器進行講解。 若你仍在使用 Python 2,請注意兩者之間語法和庫的使用差異哦~

二、參數

2.1 基本參數

基本參數 就是通過位置里指定參數值。

比如,我們可以指定兩個位置參數 x 和 y ,先添加的 x 位于第一個位置,后加入的 y 位于第二個位置。那么在命令行中輸入 1 2的時候,分別對應到的就是 x 和 y:

@click.command() @click.argument('x') @click.argument('y') def hello(x, y):print(x, y)

2.2 參數類型

參數類型 就是將參數值作為什么類型去解析,默認情況下是字符串類型。我們可以通過 type 入參來指定參數類型。

click 支持的參數類型多種多樣:

  • str / click.STRING 表示字符串類型,這也是默認類型
  • int / click.INT 表示整型
  • float / click.FLOAT 表示浮點型
  • bool / click.BOOL 表示布爾型。很棒之處在于,它會識別表示真/假的字符。對于 1、yes、y 和 true 會轉化為 True;0、no、n 和 false 會轉化為 False
  • click.UUID 表示 UUID,會自動將參數轉換為 uuid.UUID 對象
  • click.FILE 表示文件,會自動將參數轉換為文件對象,并在命令行結束時自動關閉文件
  • click.PATH 表示路徑
  • click.Choice 表示選擇選項
  • click.IntRange 表示范圍選項

同 argparse 一樣,click 也支持自定義類型,需要編寫 click.ParamType 的子類,并重載 convert 方法。

官網提供了一個例子,實現了一個整數類型,除了普通整數之外,還接受十六進制和八進制數字, 并將它們轉換為常規整數:

class BasedIntParamType(click.ParamType):name = "integer"def convert(self, value, param, ctx):try:if value[:2].lower() == "0x":return int(value[2:], 16)elif value[:1] == "0":return int(value, 8)return int(value, 10)except TypeError:self.fail("expected string for int() conversion, got "f"{value!r} of type {type(value).__name__}",param,ctx,)except ValueError:self.fail(f"{value!r} is not a valid integer", param, ctx)BASED_INT = BasedIntParamType()

2.3 文件參數

在基本參數的基礎上,通過指定參數類型,我們就能構建出各類參數。

文件參數 是非常常用的一類參數,通過 type=click.File 指定,它能正確處理所有 Python 版本的 unicode 和 字節,使得處理文件十分方便。

@click.command() @click.argument('input', type=click.File('rb')) # 指定文件為二進制讀 @click.argument('output', type=click.File('wb')) # 指定文件為二進制寫 def inout(input, output):while True:chunk = input.read(1024) # 此時 input 為文件對象,每次讀入 1024 字節if not chunk:breakoutput.write(chunk) # 此時 output 為文件對象,寫入上步讀入的內容

2.4 文件路徑參數

文件路徑參數 用來處理文件路徑,可以對路徑做是否存在等檢查,通過 type=click.Path 指定。不論文件名是 unicode 還是字節類型,獲取到的參數類型都是 unicode 類型。

@click.command() @click.argument('filename', type=click.Path(exists=True)) # 要求給定路徑存在,否則報錯 def hello(filename):click.echo(click.format_filename(filename))

如果文件名是以 - 開頭,會被誤認為是命令行選項,這個時候需要在參數前加上 -- 和空格,比如

$ python hello.py -- -foo.txt -foo.txt

2.5 選擇項參數

選擇項參數 用來限定參數內容,通過 type=click.Choice 指定。

比如,指定文件讀取方式限制為 read-only 和 read-write:

@click.command() @click.argument('mode', type=click.Choice(['read-only', 'read-write'])) def hello(mode):click.echo(mode)

2.6 可變參數

可變參數 用來定義一個參數可以有多個值,且能通過 nargs 來定義值的個數,取得的參數的變量類型為元組。

若 nargs=N,N為一個數字,則要求該參數提供 N 個值。若 N 為 -1 則接受提供無數量限制的參數,如:

@click.command() @click.argument('foo', nargs=-1) @click.argument('bar', nargs=1) def hello(foo, bar):pass

如果要實現 argparse 中要求參數數量為 1 個或多個的功能,則指定 nargs=-1 且 required=True 即可:

@click.command() @click.argument('foo', nargs=-1, required=True) def hello(foo, bar):pass

2.7 從環境變量讀取參數

通過在 click.argument 中指定 envvar,則可讀取指定名稱的環境變量作為參數值,比如:

@click.command() @click.argument('filename', envvar='FILENAME') def hello(filename):print(filename)

執行如下命令查看效果:

$ FILENAME=hello.txt python3 hello.py hello.txt

而在 argparse 中,則需要自己從環境變量中讀取。

三、小節

本文講解了 click 中基本參數的用法,在此基礎上介紹了各種類型的參數,最后說明了從環境變量中獲取參數值的寫法。

在下一篇文章中,我們來繼續深入了解 click 的功能,看看它都支持什么樣的“選項”。

『講解開源項目系列』——讓對開源項目感興趣的人不再畏懼、讓開源項目的發起者不再孤單。跟著我們的文章,你會發現編程的樂趣、使用和發現參與開源項目如此簡單。歡迎留言聯系我們、加入我們,讓更多人愛上開源、貢獻開源~

總結

以上是生活随笔為你收集整理的c2665 “initgraph”: 2 个重载中没有一个可以转换所有参数类型_Python 命令行之旅:深入 click 之参数篇...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。