Python庫docopt命令行參數(shù)解析工具
什么是 docopt
你正在為你的 Python 項目編寫一個命令行接口??赡苁且粋€數(shù)據(jù)處理工具,也可能是游戲的啟動器,又或者是部署腳本。
你希望用戶能通過簡明的參數(shù)和選項來控制程序的行為。比如,用戶可以通過 --help 選項來查看幫助信息,通過 -v 來獲取版本信息,或者通過 --input=file.txt 來指定輸入文件。
你可能已經(jīng)試過如何實現(xiàn)了,然后令人沮喪地發(fā)現(xiàn),解析復(fù)雜的命令行參數(shù)是一項乏味且容易出錯的工作。
正當(dāng)你在代碼中苦苦掙扎時,docopt 悄悄地向你招手,幫你輕松構(gòu)建一個強(qiáng)大、直觀且易于維護(hù)的命令行程序
docopt不是那些典型的參數(shù)解析庫,它基于一個簡單的前提:如果你可以寫出一個良好的幫助信息,那么你已經(jīng)定義了程序的界面。簡單地說,docopt允許你直接將幫助文檔字符串作為定義參數(shù)的界面。它幫助你定義一個接口規(guī)范,并且能夠自動解析與這個規(guī)范相符的命令行參數(shù)。
開發(fā)者 Vladimir Keleshev 在2012 年推出了 docopt,并開源在 GitHub 上。隨后,有越來越多的開發(fā)者參與到這個項目中,使其成為最受歡迎的 Python 命令行解析工具之一。docopt 簡化了命令行處理流程,將我們從繁瑣的參數(shù)解析代碼中解放出來。
與它類似的庫有 argparse 和click,但 docopt 的獨特之處在于它的聲明式界面設(shè)計。你直接寫出命令行應(yīng)該如何被調(diào)用的文檔,然后 docopt 為你解析出所有的選項和參數(shù)。這種接口設(shè)計方法是直觀且易于記憶的,減少了學(xué)習(xí)成本,讓開發(fā)者可以更專注于其他更重要的工作。
安裝
安裝 docopt 十分簡單,只需要一行 pip 命令:
pip install docopt
命令行參數(shù)格式化
要理解 docopt 的運用方法,我們首先要理解命令行參數(shù)的結(jié)構(gòu)。
docopt 的一個重要概念是形式語法(格式),它允許使用下述的幾種模式:
尖括號
<like_this>用于參數(shù),這些是必須由用戶提供的值。方括號
[like_this]用于可選的元素。大括號
{like_this}基本上不使用,但你可以用它們來構(gòu)成自己的語法標(biāo)記。圓括號
(like_this)用于表示一組選項中必須選擇一個。管道符
|用于分割可供選擇的各個選項。雙破折號
--like_this通常用于長選項式樣的命令行選項。單破折號
-l通常用于單字母的命令行選項。點點點
...表示可以重復(fù)的元素。
通過以上這些格式標(biāo)記,你可以創(chuàng)建幾乎任何你需要的命令行界面。
下面我們看看,如何定義和解析參數(shù)。
解析命令行參數(shù)
首先,定義一個簡單的幫助文檔作為字符串,這也將是我們程序的命令行接口規(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)你運行這個腳本時,你可以像下面這樣輸入命令行參數(shù):
python naval_fate.py ship new "Black Pearl" "Flying Dutchman"
你會看到程序輸出了解析后的參數(shù),例如:
{"ship": true,
"new": true,
"<name>": ["Black Pearl", "Flying Dutchman"],
"move": false, ...}
每個命令行選項和參數(shù)都會得到一個字典條目。值為 true 或false 代表布爾型選項,其他如 <name> 和--speed 則包含傳遞的值或默認(rèn)值。
子命令
docopt 非常適用于設(shè)計具有子命令的 CLI 程序,比如 git 那樣有許多子命令的程序。
示例:
"""Git. Usage: git.py add <file>... git.py commit <message> git.py push <remote> <branch> """ arguments = docopt(__doc__)
如果某個用戶嘗試執(zhí)行以下命令:
python git.py commit "Initial commit"
解析后的參數(shù)將是:
{"add": false,
"commit": true,
"<message>": "Initial commit",
"push": false, ...}
在你的程序中,你可以根據(jù)這些參數(shù)執(zhí)行相應(yīng)的邏輯,如提交代碼、添加文件等。
其他功能
docopt 甚至支持更高級的模式匹配,比如選擇(one-of)、可選項 (optional)、重復(fù)項和可能的細(xì)分(arguments, commands, options, ...)。比如,(set|remove) 意味著這是一個選擇模式,必須匹配 set 或remove。
詳細(xì)信息請參考項目說明:https://github.com/docopt/docopt,限于篇幅,這里就不展開了。
實踐
現(xiàn)在你已經(jīng)了解了 docopt 的基礎(chǔ)知識,讓我們來點互動性的練習(xí)吧:
嘗試編寫一個幫助文檔字符串,用于一個簡單的文件復(fù)制工具,該工具接受源文件和目標(biāo)文件的路徑作為參數(shù)。
增加一個可選的
--verbose選項,當(dāng)用戶希望工具提供更多的執(zhí)行詳情時可以使用這個選項。實現(xiàn)源文件路徑可以是單個文件也可以是多個文件(使用
...)。為工具添加一個版本號
1.0.0并支持--version選項。
練習(xí)程度從易到難,希望通過這些練習(xí),你能更好地理解并應(yīng)用 docopt。記得,練習(xí)時可以參考 docopt 的官方文檔,以獲取更多靈感和解決方案。
總結(jié)
在我們的 Python 編程旅程中,docopt 是一個強(qiáng)大而靈活的工具,它使命令行參數(shù)的處理簡潔而優(yōu)雅。通過直接解析幫助信息來確定命令行參數(shù),我們可以更快地創(chuàng)建一個用戶友好的命令行界面,這樣不僅節(jié)省了我們寶貴的時間,也為最終用戶提供了更佳的體驗。而當(dāng)你的項目成長,命令行界面變得日益龐大時,docopt 的簡明性和可維護(hù)性尤為寶貴。
隨著你繼續(xù)探索 Python 的深處,希望你能善用 docopt,讓它成為你工具箱中的瑰寶。讓編程像藝術(shù)一樣流暢而富有創(chuàng)意。
以上就是Python庫docopt命令行參數(shù)解析工具的詳細(xì)內(nèi)容,更多關(guān)于Python docopt庫的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python?JMESPath庫輕松操作JSON進(jìn)行數(shù)據(jù)查詢方法實例
- 自動轉(zhuǎn)換Python代碼為HTML界面的GUI庫remi使用探究
- Python信息處理庫Talon自動抽取簽名信息
- Python mplfinance庫繪制金融圖表實現(xiàn)數(shù)據(jù)可視化實例探究
- Python快速進(jìn)修指南之向量數(shù)據(jù)庫文本搜索
- python?Pydub簡單易用的音頻處理庫使用實例探索
- Python?pandera數(shù)據(jù)驗證和清洗的庫
- Python?pyasn庫解析和生成ASN.1數(shù)據(jù)結(jié)構(gòu)
相關(guān)文章
python爬取網(wǎng)站數(shù)據(jù)保存使用的方法
這篇文章主要介紹了使用Python從網(wǎng)上爬取特定屬性數(shù)據(jù)保存的方法,其中解決了編碼問題和如何使用正則匹配數(shù)據(jù)的方法,詳情看下文2013-11-11
Python使用for實現(xiàn)無限循環(huán)的多種方式匯總
這篇文章主要介紹了Python使用for實現(xiàn)無限循環(huán)的多種方式匯總,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
Python數(shù)據(jù)可視化之Pyecharts使用詳解
Pyecharts是一個由百度開源的、用于生成Echarts圖表的類庫,可以用來進(jìn)行數(shù)據(jù)可視化分析。本文將詳細(xì)講解一下Pyecharts的使用,需要的可以參考一下2022-04-04
Python 玩轉(zhuǎn)圖像格式轉(zhuǎn)換操作
這篇文章主要介紹了Python 玩轉(zhuǎn)圖像格式轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
python腳本框架webpy入門安裝及應(yīng)用創(chuàng)建
這篇文章主要為大家介紹了python腳本框架web.py的入門安裝及應(yīng)用創(chuàng)建過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11

