欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python庫(kù)docopt命令行參數(shù)解析工具

 更新時(shí)間:2024年01月17日 11:10:01   作者:曉飛的李 管窺程序  
這篇文章主要介紹了Python庫(kù)docopt命令行參數(shù)解析工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

什么是 docopt

你正在為你的 Python 項(xiàng)目編寫(xiě)一個(gè)命令行接口??赡苁且粋€(gè)數(shù)據(jù)處理工具,也可能是游戲的啟動(dòng)器,又或者是部署腳本。

你希望用戶(hù)能通過(guò)簡(jiǎn)明的參數(shù)和選項(xiàng)來(lái)控制程序的行為。比如,用戶(hù)可以通過(guò) --help 選項(xiàng)來(lái)查看幫助信息,通過(guò) -v 來(lái)獲取版本信息,或者通過(guò) --input=file.txt 來(lái)指定輸入文件。

你可能已經(jīng)試過(guò)如何實(shí)現(xiàn)了,然后令人沮喪地發(fā)現(xiàn),解析復(fù)雜的命令行參數(shù)是一項(xiàng)乏味且容易出錯(cuò)的工作。

正當(dāng)你在代碼中苦苦掙扎時(shí),docopt 悄悄地向你招手,幫你輕松構(gòu)建一個(gè)強(qiáng)大、直觀且易于維護(hù)的命令行程序

docopt不是那些典型的參數(shù)解析庫(kù),它基于一個(gè)簡(jiǎn)單的前提:如果你可以寫(xiě)出一個(gè)良好的幫助信息,那么你已經(jīng)定義了程序的界面。簡(jiǎn)單地說(shuō),docopt允許你直接將幫助文檔字符串作為定義參數(shù)的界面。它幫助你定義一個(gè)接口規(guī)范,并且能夠自動(dòng)解析與這個(gè)規(guī)范相符的命令行參數(shù)。

開(kāi)發(fā)者 Vladimir Keleshev 在2012 年推出了 docopt,并開(kāi)源在 GitHub 上。隨后,有越來(lái)越多的開(kāi)發(fā)者參與到這個(gè)項(xiàng)目中,使其成為最受歡迎的 Python 命令行解析工具之一。docopt 簡(jiǎn)化了命令行處理流程,將我們從繁瑣的參數(shù)解析代碼中解放出來(lái)。

與它類(lèi)似的庫(kù)有 argparse 和click,但 docopt 的獨(dú)特之處在于它的聲明式界面設(shè)計(jì)。你直接寫(xiě)出命令行應(yīng)該如何被調(diào)用的文檔,然后 docopt 為你解析出所有的選項(xiàng)和參數(shù)。這種接口設(shè)計(jì)方法是直觀且易于記憶的,減少了學(xué)習(xí)成本,讓開(kāi)發(fā)者可以更專(zhuān)注于其他更重要的工作。

安裝

安裝 docopt 十分簡(jiǎn)單,只需要一行 pip 命令:

pip install docopt

命令行參數(shù)格式化

要理解 docopt 的運(yùn)用方法,我們首先要理解命令行參數(shù)的結(jié)構(gòu)。

docopt 的一個(gè)重要概念是形式語(yǔ)法(格式),它允許使用下述的幾種模式:

  • 尖括號(hào) <like_this> 用于參數(shù),這些是必須由用戶(hù)提供的值。

  • 方括號(hào) [like_this] 用于可選的元素。

  • 大括號(hào) {like_this} 基本上不使用,但你可以用它們來(lái)構(gòu)成自己的語(yǔ)法標(biāo)記。

  • 圓括號(hào) (like_this) 用于表示一組選項(xiàng)中必須選擇一個(gè)。

  • 管道符 | 用于分割可供選擇的各個(gè)選項(xiàng)。

  • 雙破折號(hào) --like_this 通常用于長(zhǎng)選項(xiàng)式樣的命令行選項(xiàng)。

  • 單破折號(hào) -l 通常用于單字母的命令行選項(xiàng)。

  • 點(diǎn)點(diǎn)點(diǎn) ... 表示可以重復(fù)的元素。

通過(guò)以上這些格式標(biāo)記,你可以創(chuàng)建幾乎任何你需要的命令行界面。

下面我們看看,如何定義和解析參數(shù)。

解析命令行參數(shù)

首先,定義一個(gè)簡(jiǎn)單的幫助文檔作為字符串,這也將是我們程序的命令行接口規(guī)范。

例子如下:

"""Naval Fate.

Usage:
  naval_fate.py ship new <name>...
  naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
  naval_fate.py ship shoot <x> <y>
  naval_fate.py mine (set|remove) <x> <y> [--moored|--drifting]
  naval_fate.py (-h | --help)
  naval_fate.py --version

Options:
  -h --help     Show this screen.
  --version     Show version.
  --speed=<kn>  Speed in knots [default: 10].
  --moored      Moored (anchored) mine.
  --drifting    Drifting mine.
"""

from docopt import docopt

if __name__ == '__main__':
    arguments = docopt(__doc__, version='Naval Fate 2.0')
    print(arguments)

當(dāng)你運(yùn)行這個(gè)腳本時(shí),你可以像下面這樣輸入命令行參數(shù):

python naval_fate.py ship new "Black Pearl" "Flying Dutchman"

你會(huì)看到程序輸出了解析后的參數(shù),例如:

{"ship": true,
 "new": true,
 "<name>": ["Black Pearl", "Flying Dutchman"],
 "move": false, ...}

每個(gè)命令行選項(xiàng)和參數(shù)都會(huì)得到一個(gè)字典條目。值為 true 或false 代表布爾型選項(xiàng),其他如 <name> 和--speed 則包含傳遞的值或默認(rèn)值。

子命令

docopt 非常適用于設(shè)計(jì)具有子命令的 CLI 程序,比如 git 那樣有許多子命令的程序。

示例:

"""Git.
Usage:
  git.py add <file>...
  git.py commit <message>
  git.py push <remote> <branch>
"""
arguments = docopt(__doc__)

如果某個(gè)用戶(hù)嘗試執(zhí)行以下命令:

python git.py commit "Initial commit"

解析后的參數(shù)將是:

{"add": false,
 "commit": true,
 "<message>": "Initial commit",
 "push": false, ...}

在你的程序中,你可以根據(jù)這些參數(shù)執(zhí)行相應(yīng)的邏輯,如提交代碼、添加文件等。

其他功能

docopt 甚至支持更高級(jí)的模式匹配,比如選擇(one-of)、可選項(xiàng) (optional)、重復(fù)項(xiàng)和可能的細(xì)分(arguments, commands, options, ...)。比如,(set|remove) 意味著這是一個(gè)選擇模式,必須匹配 set 或remove。

詳細(xì)信息請(qǐng)參考項(xiàng)目說(shuō)明:https://github.com/docopt/docopt,限于篇幅,這里就不展開(kāi)了。

實(shí)踐

現(xiàn)在你已經(jīng)了解了 docopt 的基礎(chǔ)知識(shí),讓我們來(lái)點(diǎn)互動(dòng)性的練習(xí)吧:

  • 嘗試編寫(xiě)一個(gè)幫助文檔字符串,用于一個(gè)簡(jiǎn)單的文件復(fù)制工具,該工具接受源文件和目標(biāo)文件的路徑作為參數(shù)。

  • 增加一個(gè)可選的 --verbose 選項(xiàng),當(dāng)用戶(hù)希望工具提供更多的執(zhí)行詳情時(shí)可以使用這個(gè)選項(xiàng)。

  • 實(shí)現(xiàn)源文件路徑可以是單個(gè)文件也可以是多個(gè)文件(使用 ...)。

  • 為工具添加一個(gè)版本號(hào) 1.0.0 并支持 --version 選項(xiàng)。

練習(xí)程度從易到難,希望通過(guò)這些練習(xí),你能更好地理解并應(yīng)用 docopt。記得,練習(xí)時(shí)可以參考 docopt 的官方文檔,以獲取更多靈感和解決方案。

總結(jié)

在我們的 Python 編程旅程中,docopt 是一個(gè)強(qiáng)大而靈活的工具,它使命令行參數(shù)的處理簡(jiǎn)潔而優(yōu)雅。通過(guò)直接解析幫助信息來(lái)確定命令行參數(shù),我們可以更快地創(chuàng)建一個(gè)用戶(hù)友好的命令行界面,這樣不僅節(jié)省了我們寶貴的時(shí)間,也為最終用戶(hù)提供了更佳的體驗(yàn)。而當(dāng)你的項(xiàng)目成長(zhǎng),命令行界面變得日益龐大時(shí),docopt 的簡(jiǎn)明性和可維護(hù)性尤為寶貴。

隨著你繼續(xù)探索 Python 的深處,希望你能善用 docopt,讓它成為你工具箱中的瑰寶。讓編程像藝術(shù)一樣流暢而富有創(chuàng)意。

以上就是Python庫(kù)docopt命令行參數(shù)解析工具的詳細(xì)內(nèi)容,更多關(guān)于Python docopt庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • TensorFlow可視化工具TensorBoard默認(rèn)圖與自定義圖

    TensorFlow可視化工具TensorBoard默認(rèn)圖與自定義圖

    這篇文章主要介紹了TensorFlow可視化工具TensorBoard默認(rèn)圖與自定義圖的使用操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 機(jī)器學(xué)習(xí)10大經(jīng)典算法詳解

    機(jī)器學(xué)習(xí)10大經(jīng)典算法詳解

    這篇文章主要為大家詳細(xì)介紹了機(jī)器學(xué)習(xí)10大經(jīng)典算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • ChatGPT 幫我自動(dòng)編寫(xiě) Python 爬蟲(chóng)腳本的詳細(xì)過(guò)程

    ChatGPT 幫我自動(dòng)編寫(xiě) Python 爬蟲(chóng)腳本的詳細(xì)過(guò)程

    ChatGPT是一種基于大語(yǔ)言模型的生成式AI,換句話說(shuō)它可以自動(dòng)生成類(lèi)似人類(lèi)語(yǔ)言的文本,把梳理好的有邏輯的答案呈現(xiàn)在你面前,這完全不同于傳統(tǒng)搜索工具,這篇文章主要介紹了ChatGPT 幫我自動(dòng)編寫(xiě) Python 爬蟲(chóng)腳本,需要的朋友可以參考下
    2023-02-02
  • 簡(jiǎn)單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼

    簡(jiǎn)單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼

    Python編程是一種通用的編程語(yǔ)言,開(kāi)源、靈活、功能強(qiáng)大且易于使用,python最重要的特性之一是其用于數(shù)據(jù)處理和分析任務(wù)的豐富實(shí)用程序和庫(kù)集,這篇文章主要給大家介紹了一些簡(jiǎn)單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼,需要的朋友可以參考下
    2021-07-07
  • python3實(shí)現(xiàn)TCP協(xié)議的簡(jiǎn)單服務(wù)器和客戶(hù)端案例(分享)

    python3實(shí)現(xiàn)TCP協(xié)議的簡(jiǎn)單服務(wù)器和客戶(hù)端案例(分享)

    下面小編就為大家?guī)?lái)一篇python3實(shí)現(xiàn)TCP協(xié)議的簡(jiǎn)單服務(wù)器和客戶(hù)端案例(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 淺析Python中的隨機(jī)采樣和概率分布

    淺析Python中的隨機(jī)采樣和概率分布

    Python中包含了很多概率算法,包括基礎(chǔ)的隨機(jī)采樣以及許多經(jīng)典的概率分布生成。本文主要介紹了我們?cè)跈C(jī)器學(xué)習(xí)中常用的概率函數(shù)。感興趣的同學(xué)可以了解一下
    2021-12-12
  • Python Dataframe 指定多列去重、求差集的方法

    Python Dataframe 指定多列去重、求差集的方法

    今天小編就為大家分享一篇Python Dataframe 指定多列去重、求差集的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Django定時(shí)任務(wù)Django-crontab的使用詳解

    Django定時(shí)任務(wù)Django-crontab的使用詳解

    測(cè)試平臺(tái)執(zhí)行測(cè)試用例時(shí),可以借助jenkins之類(lèi)的CI/CD工具,也可以使用定時(shí)任務(wù)crontab,作為測(cè)試開(kāi)發(fā)工程師,我們可能沒(méi)有權(quán)限去操作服務(wù)器,那么我們就只能使用django-crontab,在指定時(shí)間循環(huán)執(zhí)行測(cè)試用例,對(duì)定時(shí)任務(wù)Django-crontab的使用感興趣的朋友一起看看吧
    2022-07-07
  • Python Pytest裝飾器@pytest.mark.parametrize詳解

    Python Pytest裝飾器@pytest.mark.parametrize詳解

    本文主要介紹了Python Pytest裝飾器@pytest.mark.parametrize詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解Python+Turtle繪制奧運(yùn)標(biāo)志的實(shí)現(xiàn)

    詳解Python+Turtle繪制奧運(yùn)標(biāo)志的實(shí)現(xiàn)

    turtle庫(kù)是Python標(biāo)準(zhǔn)庫(kù)之一,是入門(mén)級(jí)的圖形繪制函數(shù)庫(kù)。本文就將利用turtle庫(kù)繪制一個(gè)奧運(yùn)標(biāo)志—奧運(yùn)五環(huán),感興趣的可以學(xué)習(xí)一下
    2022-02-02

最新評(píng)論