最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python命令行click參數(shù)用法解析

 更新時(shí)間:2019年12月19日 09:58:06   作者:Python探索牛  
這篇文章主要介紹了Python命令行click參數(shù)用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Python命令行click參數(shù)用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、前言

在概念上, click 把命令行分為 3 個(gè)組成:參數(shù)、選項(xiàng)和命令。

參數(shù) 就是跟在命令后的除選項(xiàng)外的內(nèi)容,比如 git add a.txt 中的 a.txt 就是表示文件路徑的參數(shù)

選項(xiàng) 就是以 - 或 -- 開頭的參數(shù),比如 -f、--file

命令 就是命令行的初衷了,比如 git 就是命令,而 git add 中的 add 則是 git 的子命令

二、參數(shù)

2.1 基本參數(shù)

基本參數(shù) 就是通過位置里指定參數(shù)值。

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

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

2.2 參數(shù)類型

參數(shù)類型 就是將參數(shù)值作為什么類型去解析,默認(rèn)情況下是字符串類型。我們可以通過 type 入?yún)碇付▍?shù)類型。

click 支持的參數(shù)類型多種多樣:

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

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

2.3 文件參數(shù)

在基本參數(shù)的基礎(chǔ)上,通過指定參數(shù)類型,我們就能構(gòu)建出各類參數(shù)。

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

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

2.4 文件路徑參數(shù)

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

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

如果文件名是以 - 開頭,會(huì)被誤認(rèn)為是命令行選項(xiàng),這個(gè)時(shí)候需要在參數(shù)前加上 -- 和空格,比如

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

2.5 選擇項(xiàng)參數(shù)

選擇項(xiàng)參數(shù) 用來限定參數(shù)內(nèi)容,通過 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 可變參數(shù)

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

若 nargs=N,N為一個(gè)數(shù)字,則要求該參數(shù)提供 N 個(gè)值。若 N 為 -1 則接受提供無(wú)數(shù)量限制的參數(shù),如:

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

如果要實(shí)現(xiàn) argparse 中要求參數(shù)數(shù)量為 1 個(gè)或多個(gè)的功能,則指定 nargs=-1 且 required=True 即可:

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

2.7 從環(huán)境變量讀取參數(shù)

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

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

執(zhí)行如下命令查看效果:

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

而在 argparse 中,則需要自己從環(huán)境變量中讀取。

三、小節(jié)

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • pytest使用parametrize將參數(shù)化變量傳遞到fixture

    pytest使用parametrize將參數(shù)化變量傳遞到fixture

    這篇文章主要為大家介紹了pytest使用parametrize將參數(shù)化變量傳遞到fixture的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python中的引用和拷貝實(shí)例解析

    Python中的引用和拷貝實(shí)例解析

    這篇文章主要介紹了python中的引用和拷貝實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • django 解決自定義序列化返回處理數(shù)據(jù)為null的問題

    django 解決自定義序列化返回處理數(shù)據(jù)為null的問題

    這篇文章主要介紹了django 解決自定義序列化返回處理數(shù)據(jù)為null的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 使用Pytorch訓(xùn)練two-head網(wǎng)絡(luò)的操作

    使用Pytorch訓(xùn)練two-head網(wǎng)絡(luò)的操作

    這篇文章主要介紹了使用Pytorch訓(xùn)練two-head網(wǎng)絡(luò)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python使用切片快速刪除列表數(shù)據(jù)

    Python使用切片快速刪除列表數(shù)據(jù)

    在?Python?中,列表(list)是一種常用的數(shù)據(jù)結(jié)構(gòu),支持動(dòng)態(tài)增刪改查操作,但切片(slice)提供了一種更高效、更靈活的方式來刪除或修改列表的連續(xù)部分,本文將詳細(xì)介紹如何使用切片快速刪除列表數(shù)據(jù),需要的朋友可以參考下
    2026-04-04
  • Python 使用ConfigParser操作ini配置文件

    Python 使用ConfigParser操作ini配置文件

    這篇文章主要介紹了Python 使用ConfigParser操作ini配置文件的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • pycharm無(wú)法導(dǎo)入本地模塊的解決方式

    pycharm無(wú)法導(dǎo)入本地模塊的解決方式

    今天小編就為大家分享一篇pycharm無(wú)法導(dǎo)入本地模塊的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python實(shí)現(xiàn)將橫表和縱表任意轉(zhuǎn)換的兩種方法

    Python實(shí)現(xiàn)將橫表和縱表任意轉(zhuǎn)換的兩種方法

    在日常做數(shù)據(jù)分析,接收到最多的表格是縱表,每個(gè)字段變量都有很長(zhǎng)數(shù)據(jù)的長(zhǎng)表,我們稱之為縱向數(shù)據(jù),但是,有時(shí)候,我們也會(huì)遇到橫表,對(duì)于橫向數(shù)據(jù),我們會(huì)數(shù)據(jù)轉(zhuǎn)化,將其轉(zhuǎn)化為縱向數(shù)據(jù),感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-12-12
  • pycharm查看之前的運(yùn)行結(jié)果詳細(xì)步驟

    pycharm查看之前的運(yùn)行結(jié)果詳細(xì)步驟

    在工作場(chǎng)景下,程序員如何運(yùn)用PyCharm去書寫代碼以及運(yùn)行文件,還有學(xué)會(huì)對(duì)各種突發(fā)情況的應(yīng)對(duì),這篇文章主要給大家介紹了關(guān)于pycharm查看之前的運(yùn)行結(jié)果的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • django中使用事務(wù)及接入支付寶支付功能

    django中使用事務(wù)及接入支付寶支付功能

    這篇文章主要介紹了django中使用事務(wù)以及接入支付寶支付功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

宁南县| 织金县| 嘉荫县| 柳州市| 淳化县| 松原市| 无锡市| 九江市| 绥棱县| 桦甸市| 舟曲县| 光山县| 平遥县| 泾川县| 怀化市| 朔州市| 盐山县| 南安市| 剑川县| 余江县| 子长县| 三河市| 天气| 阳东县| 出国| 尉犁县| 高雄县| 来凤县| 萨嘎县| 石景山区| 临澧县| 澄江县| 什邡市| 岳普湖县| 大足县| 武陟县| 四会市| 从化市| 周口市| 广南县| 大冶市|