Python命令行參數(shù)解析工具 docopt 安裝和應(yīng)用過程詳解
什么是 docopt?
1、docopt 是一種 Python 編寫的命令行執(zhí)行腳本的交互語言。
它是一種語言!
它是一種語言!
它是一種語言!
2、使用這種語言可以在自己的腳本中,添加一些規(guī)則限制。這樣腳本在執(zhí)行的時候就必須按照這樣格式來執(zhí)行,同時,也可以很方便的編寫一些幫助信息(其實(shí)很多軟件在輸入 -h 的時候顯示信息 、例如 python -h ,會顯示所有的 python 指令,并且頁通過 docopt 限制了 python 指令的格式),下面是一些簡單的例子:
docopt 的安裝
docopt 有很多把版本,分別支持不同的語言,最簡單就是支持 python 語言,docopt.java 支持 java腳本,docopts 則是支持 shell 腳本的(下面的例子主要事以 docopts 為例)
1、安裝 docopt
方法一:
pip install docopt
方法二:
也可以在 github 上下載源碼(docopt 是開源項(xiàng)目),然后通過 Python setup.py install 安裝
2、安裝 docopts 就必須使用上面的安裝docopt 的方法二來進(jìn)行安裝,然后使用 python 安裝,下載地址:
https://github.com/docopt/docopts
docopt 實(shí)現(xiàn)簡單分析
在 Python 中有這么一個屬性__doc__ , 它的值是字符串,一般表示幫助信息,而 docopt 正是利用了這一屬性,把幫助信息替換成命令行參數(shù)解析說明,在對它進(jìn)行解析即可:
舉個例子:
"""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ù)解析說明,在函數(shù)入口調(diào)用了 docopt 函數(shù)進(jìn)行解析,返回的 arguments 變量是一個字典變量,它記錄了選項(xiàng)是否被選用了,參數(shù)的值是什么等信息,當(dāng)程序從命令行運(yùn)行時,我們就是根據(jù) arguments 變量的記錄來得知用戶輸入的選項(xiàng)和參數(shù)信息。
所以如何寫好命令行參數(shù)解析說明就很重要了,命令行解析信息包含兩部部分,分別是使用模式格式和選項(xiàng)描述格式。
使用模式格式(Usage pattern format)
使用模式格式 usage:開始,以空行結(jié)束,如上述代碼顯示,它主要描述了用戶添加命令含參數(shù)的格式,也就是使用時的格式,解析也是按照此格式來進(jìn)行的。
每一個使用模式都包含以下元素:
* 參數(shù)
參數(shù)使用大寫字母或者使用尖括號<> 圍起來
* 選項(xiàng)
選項(xiàng)以短橫線開始 或者 --,只有一個字母時格式 -o,多于一個字母時 --output ,同時還可以把多個單字母的選選項(xiàng)合并, -ov 等同于 -o, -v, -i.。選項(xiàng)也能
參數(shù),此時別忘了給選項(xiàng)添加描述說明
接下來時使用模式中用到的一些標(biāo)識的含義,正確的使用他們能夠更好的完成解析任務(wù):
* []
代表可選的元素,方括號中的元素可有可無
*()
代表必要有的元素,括號內(nèi)的元素必須要有,哪怕時多個里面選一個
*|
互斥的元素,豎線兩旁的元素只能有一個留下
* ....
代表元素可以重復(fù)出現(xiàn),最后解釋的結(jié)果時一個列表
*[options]
指定特定的選項(xiàng),完成特定的任務(wù)。
選項(xiàng)描述格式(Options description format)
選項(xiàng)描述同樣必不可少,尤其時方選項(xiàng)有參數(shù),并且還需要為它賦默認(rèn)值時。
為選項(xiàng)添加參數(shù)的格式有兩種:
- -o FILE --output -FILE # 不是用逗號, 使用 = 符號
- -i <file>, --input <file> # 使用逗號, 不使用 = 符號
為選項(xiàng)添加描述說明,只需要用兩個空格分割選項(xiàng)和說明即可
為選項(xiàng)添加默認(rèn)值時,把它添加到選擇描述后面即可,格式如下【defailt: <my-default-value>】
--coefficient=K The K coefficient [default: 2.95] --output=FILE Output file [default: test.txt] --directory=DIR Some directory [default: ./]
如果選項(xiàng)時可以重復(fù)的,那么它的值 [default: ...] 將會是一個列表,若不可以重復(fù),則它的值時一個字符串。
使用
理解了使用模式格式 和 選項(xiàng)描述格式之后,在配合給出的例子就能較好的理解了;
接下來就是得到輸入信息了
在前面提到 arguments 參數(shù)是一個字典類型,包含了用戶輸入的選項(xiàng)和參數(shù)信息,還是上面的代碼端例子,假如我們從命令行運(yùn)行的輸入是
python test.py ship Guardian move 100 150 --speed=15
那么打印 arguments 參數(shù)如下:
{'--drifting': False, '--help': False, '--moored': False, '--speed': '15', '--version': False, '<name>': ['Guardian'], '<x>': '100', '<y>': '150', 'mine': False, 'move': True, 'new': False, 'remove': False, 'set': False, 'ship': True, 'shoot': False}
從打印的信息可以到,對于選項(xiàng),使布爾類型來標(biāo)識是否輸入了該選項(xiàng),則使用具體值來表述。
這樣以來,程序就可以從 arguments 變量中得到下一步的操作了,若是用戶什么參數(shù)都沒輸入,則打印 Usage 說明提示內(nèi)容。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python中的iterator和"lazy?iterator"區(qū)別介紹
這篇文章主要介紹了python中的iterator和?“l(fā)azy?iterator“之間有什么區(qū)別,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04Python全角與半角之間相互轉(zhuǎn)換的方法總結(jié)
全角與半角轉(zhuǎn)換在處理漢語語料中會經(jīng)常出現(xiàn),這里分別說明漢字、數(shù)字、字母的unicode編碼范圍,下面這篇文章主要給大家介紹了關(guān)于Python全角與半角之間相互轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2022-03-03python中pandas操作apply返回多列的實(shí)現(xiàn)
本文主要介紹了python中pandas操作apply返回多列的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Python機(jī)器學(xué)習(xí)之scikit-learn庫中KNN算法的封裝與使用方法
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)之scikit-learn庫中KNN算法的封裝與使用方法,結(jié)合實(shí)例形式分析了scikit-learn庫中KNN算法的相關(guān)調(diào)用與使用技巧,需要的朋友可以參考下2018-12-12Python+Opencv實(shí)現(xiàn)數(shù)字識別的示例代碼
這篇文章主要介紹了Python+Opencv實(shí)現(xiàn)數(shù)字識別的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03