Python庫(kù)docopt命令行參數(shù)解析工具
什么是 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)文章!
- Python?JMESPath庫(kù)輕松操作JSON進(jìn)行數(shù)據(jù)查詢(xún)方法實(shí)例
- 自動(dòng)轉(zhuǎn)換Python代碼為HTML界面的GUI庫(kù)remi使用探究
- Python信息處理庫(kù)Talon自動(dòng)抽取簽名信息
- Python mplfinance庫(kù)繪制金融圖表實(shí)現(xiàn)數(shù)據(jù)可視化實(shí)例探究
- Python快速進(jìn)修指南之向量數(shù)據(jù)庫(kù)文本搜索
- python?Pydub簡(jiǎn)單易用的音頻處理庫(kù)使用實(shí)例探索
- Python?pandera數(shù)據(jù)驗(yàn)證和清洗的庫(kù)
- Python?pyasn庫(kù)解析和生成ASN.1數(shù)據(jù)結(jié)構(gòu)
相關(guān)文章
TensorFlow可視化工具TensorBoard默認(rèn)圖與自定義圖
這篇文章主要介紹了TensorFlow可視化工具TensorBoard默認(rèn)圖與自定義圖的使用操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10機(jī)器學(xué)習(xí)10大經(jīng)典算法詳解
這篇文章主要為大家詳細(xì)介紹了機(jī)器學(xué)習(xí)10大經(jīng)典算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12ChatGPT 幫我自動(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í)代碼
Python編程是一種通用的編程語(yǔ)言,開(kāi)源、靈活、功能強(qiáng)大且易于使用,python最重要的特性之一是其用于數(shù)據(jù)處理和分析任務(wù)的豐富實(shí)用程序和庫(kù)集,這篇文章主要給大家介紹了一些簡(jiǎn)單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼,需要的朋友可以參考下2021-07-07python3實(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-06Python Dataframe 指定多列去重、求差集的方法
今天小編就為大家分享一篇Python Dataframe 指定多列去重、求差集的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Django定時(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-07Python Pytest裝飾器@pytest.mark.parametrize詳解
本文主要介紹了Python Pytest裝飾器@pytest.mark.parametrize詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08詳解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