Python庫docopt命令行參數(shù)解析工具
什么是 docopt
你正在為你的 Python 項(xiàng)目編寫一個(gè)命令行接口??赡苁且粋€(gè)數(shù)據(jù)處理工具,也可能是游戲的啟動(dòng)器,又或者是部署腳本。
你希望用戶能通過簡明的參數(shù)和選項(xiàng)來控制程序的行為。比如,用戶可以通過 --help 選項(xiàng)來查看幫助信息,通過 -v 來獲取版本信息,或者通過 --input=file.txt 來指定輸入文件。
你可能已經(jīng)試過如何實(shí)現(xiàn)了,然后令人沮喪地發(fā)現(xiàn),解析復(fù)雜的命令行參數(shù)是一項(xiàng)乏味且容易出錯(cuò)的工作。
正當(dāng)你在代碼中苦苦掙扎時(shí),docopt 悄悄地向你招手,幫你輕松構(gòu)建一個(gè)強(qiáng)大、直觀且易于維護(hù)的命令行程序
docopt不是那些典型的參數(shù)解析庫,它基于一個(gè)簡單的前提:如果你可以寫出一個(gè)良好的幫助信息,那么你已經(jīng)定義了程序的界面。簡單地說,docopt允許你直接將幫助文檔字符串作為定義參數(shù)的界面。它幫助你定義一個(gè)接口規(guī)范,并且能夠自動(dòng)解析與這個(gè)規(guī)范相符的命令行參數(shù)。
開發(fā)者 Vladimir Keleshev 在2012 年推出了 docopt,并開源在 GitHub 上。隨后,有越來越多的開發(fā)者參與到這個(gè)項(xiàng)目中,使其成為最受歡迎的 Python 命令行解析工具之一。docopt 簡化了命令行處理流程,將我們從繁瑣的參數(shù)解析代碼中解放出來。
與它類似的庫有 argparse 和click,但 docopt 的獨(dú)特之處在于它的聲明式界面設(shè)計(jì)。你直接寫出命令行應(yīng)該如何被調(diào)用的文檔,然后 docopt 為你解析出所有的選項(xiàng)和參數(shù)。這種接口設(shè)計(jì)方法是直觀且易于記憶的,減少了學(xué)習(xí)成本,讓開發(fā)者可以更專注于其他更重要的工作。
安裝
安裝 docopt 十分簡單,只需要一行 pip 命令:
pip install docopt
命令行參數(shù)格式化
要理解 docopt 的運(yùn)用方法,我們首先要理解命令行參數(shù)的結(jié)構(gòu)。
docopt 的一個(gè)重要概念是形式語法(格式),它允許使用下述的幾種模式:
尖括號(hào)
<like_this>用于參數(shù),這些是必須由用戶提供的值。方括號(hào)
[like_this]用于可選的元素。大括號(hào)
{like_this}基本上不使用,但你可以用它們來構(gòu)成自己的語法標(biāo)記。圓括號(hào)
(like_this)用于表示一組選項(xiàng)中必須選擇一個(gè)。管道符
|用于分割可供選擇的各個(gè)選項(xiàng)。雙破折號(hào)
--like_this通常用于長選項(xiàng)式樣的命令行選項(xiàng)。單破折號(hào)
-l通常用于單字母的命令行選項(xiàng)。點(diǎn)點(diǎn)點(diǎn)
...表示可以重復(fù)的元素。
通過以上這些格式標(biāo)記,你可以創(chuàng)建幾乎任何你需要的命令行界面。
下面我們看看,如何定義和解析參數(shù)。
解析命令行參數(shù)
首先,定義一個(gè)簡單的幫助文檔作為字符串,這也將是我們程序的命令行接口規(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è)用戶嘗試執(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)目說明:https://github.com/docopt/docopt,限于篇幅,這里就不展開了。
實(shí)踐
現(xiàn)在你已經(jīng)了解了 docopt 的基礎(chǔ)知識(shí),讓我們來點(diǎn)互動(dòng)性的練習(xí)吧:
嘗試編寫一個(gè)幫助文檔字符串,用于一個(gè)簡單的文件復(fù)制工具,該工具接受源文件和目標(biāo)文件的路徑作為參數(shù)。
增加一個(gè)可選的
--verbose選項(xiàng),當(dāng)用戶希望工具提供更多的執(zhí)行詳情時(shí)可以使用這個(gè)選項(xiàng)。實(shí)現(xiàn)源文件路徑可以是單個(gè)文件也可以是多個(gè)文件(使用
...)。為工具添加一個(gè)版本號(hào)
1.0.0并支持--version選項(xiàng)。
練習(xí)程度從易到難,希望通過這些練習(xí),你能更好地理解并應(yīng)用 docopt。記得,練習(xí)時(shí)可以參考 docopt 的官方文檔,以獲取更多靈感和解決方案。
總結(jié)
在我們的 Python 編程旅程中,docopt 是一個(gè)強(qiáng)大而靈活的工具,它使命令行參數(shù)的處理簡潔而優(yōu)雅。通過直接解析幫助信息來確定命令行參數(shù),我們可以更快地創(chuàng)建一個(gè)用戶友好的命令行界面,這樣不僅節(jié)省了我們寶貴的時(shí)間,也為最終用戶提供了更佳的體驗(yàn)。而當(dāng)你的項(xiàng)目成長,命令行界面變得日益龐大時(shí),docopt 的簡明性和可維護(hù)性尤為寶貴。
隨著你繼續(xù)探索 Python 的深處,希望你能善用 docopt,讓它成為你工具箱中的瑰寶。讓編程像藝術(shù)一樣流暢而富有創(chuàng)意。
以上就是Python庫docopt命令行參數(shù)解析工具的詳細(xì)內(nèi)容,更多關(guān)于Python docopt庫的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python?JMESPath庫輕松操作JSON進(jìn)行數(shù)據(jù)查詢方法實(shí)例
- 自動(dòng)轉(zhuǎn)換Python代碼為HTML界面的GUI庫remi使用探究
- Python信息處理庫Talon自動(dòng)抽取簽名信息
- Python mplfinance庫繪制金融圖表實(shí)現(xiàn)數(shù)據(jù)可視化實(shí)例探究
- Python快速進(jìn)修指南之向量數(shù)據(jù)庫文本搜索
- python?Pydub簡單易用的音頻處理庫使用實(shí)例探索
- Python?pandera數(shù)據(jù)驗(yàn)證和清洗的庫
- Python?pyasn庫解析和生成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-12
ChatGPT 幫我自動(dòng)編寫 Python 爬蟲腳本的詳細(xì)過程
ChatGPT是一種基于大語言模型的生成式AI,換句話說它可以自動(dòng)生成類似人類語言的文本,把梳理好的有邏輯的答案呈現(xiàn)在你面前,這完全不同于傳統(tǒng)搜索工具,這篇文章主要介紹了ChatGPT 幫我自動(dòng)編寫 Python 爬蟲腳本,需要的朋友可以參考下2023-02-02
簡單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼
Python編程是一種通用的編程語言,開源、靈活、功能強(qiáng)大且易于使用,python最重要的特性之一是其用于數(shù)據(jù)處理和分析任務(wù)的豐富實(shí)用程序和庫集,這篇文章主要給大家介紹了一些簡單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼,需要的朋友可以參考下2021-07-07
python3實(shí)現(xiàn)TCP協(xié)議的簡單服務(wù)器和客戶端案例(分享)
下面小編就為大家?guī)硪黄猵ython3實(shí)現(xiàn)TCP協(xié)議的簡單服務(wù)器和客戶端案例(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Python Dataframe 指定多列去重、求差集的方法
今天小編就為大家分享一篇Python Dataframe 指定多列去重、求差集的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Django定時(shí)任務(wù)Django-crontab的使用詳解
測試平臺(tái)執(zhí)行測試用例時(shí),可以借助jenkins之類的CI/CD工具,也可以使用定時(shí)任務(wù)crontab,作為測試開發(fā)工程師,我們可能沒有權(quán)限去操作服務(wù)器,那么我們就只能使用django-crontab,在指定時(shí)間循環(huán)執(zhí)行測試用例,對(duì)定時(shí)任務(wù)Django-crontab的使用感興趣的朋友一起看看吧2022-07-07
Python Pytest裝飾器@pytest.mark.parametrize詳解
本文主要介紹了Python Pytest裝飾器@pytest.mark.parametrize詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
詳解Python+Turtle繪制奧運(yùn)標(biāo)志的實(shí)現(xiàn)
turtle庫是Python標(biāo)準(zhǔn)庫之一,是入門級(jí)的圖形繪制函數(shù)庫。本文就將利用turtle庫繪制一個(gè)奧運(yùn)標(biāo)志—奧運(yùn)五環(huán),感興趣的可以學(xué)習(xí)一下2022-02-02

