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