docopt 是用來解析命令列參數的工具,當想要在 Python 程式後面附加參數時,就不需要再為此而發愁了。以下這篇文章主要介紹了Python中命令列參數解析工具之docopt的相關資料,介紹的非常詳細,需要的朋友們下面來一起看看吧。
前言
docopt 是一個開源的函式庫。它在README 中就已經做了詳細的介紹,並且還附帶了很多例子可供學習,這篇文章也是翻譯一下README 中內容……
docopt 最大的特點在於不用考慮如何解析命令行參數,而是當你把心中想要的格式依照一定的規則寫出來後,解析就完成了。
docopt的安裝
docopt有很多種版本,分別支援不同的語言,最簡答的docopt支援python腳本,docopt. java支援java腳本,docopts則是支援shell腳本的(下面的例子主要以docopts為例),具體的可以參考github的docopt說明
安裝docopt
#以mac os x為例安裝,安裝docopts前首先需要安裝docopt,有兩種安裝方法
#方法一
比較簡單的方法是直接用pip 安裝,pip install docopt==0.6.2
python setup.py install 安裝
##docopt 的實作簡單分析在Python 中有這麼一個屬性
__doc__ ,它的值是字串,一般表示幫助訊息,而docopt 正是利用了這個屬性,把幫助資訊替換成命令列參數解析說明,再對它進行解析即可。
#
"""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)
所以如何寫好命令列參數解析說明就變得至關重要了,命令列解析資訊包含兩個部分,分別是使用模式格式和選項描述格式。
使用模式格式(Usage pattern format)#使用模式以usage:開始,以空白行結束,如上程式碼片段所示,它主要描述了使用者新增命令列參數時的格式,也就是使用時的格式,解析也是按照此格式來進行的。
每一個使用模式都包含以下元素:
* 參數
參數使用大寫字母或使用尖括號a8093152e673feb7aba1828c43532094圍起來。
* 選項
選項以短橫線開始-或--。只有一個字母時格式-o,多於一個字母時--output。同時還可以把多個單字母的選項合併,-ovi等同於-o、-v、-i。選項也能有參數,此時別忘了為選項新增描述說明。
接下來是使用模式中用到的一些標識的意義,正確地使用他們能夠更好的完成解析任務:
##* []
代表可選的元素,方括號內的元素可有可無
* ()
代表必須要有的元素,括號內的元素一定要有,哪怕是多個裡面選一個。
* |
互斥的元素,豎線兩旁的元素只能有一個留下
* ...
代表元素可以重複出現,最後解析的結果是一個清單
* [options]
指定特定的選項,完成特定的任務。
#選項描述同樣必不可少,尤其是當選項有參數,並且還需要為它賦默認值時。
為選項新增參數的格式有兩種:-o FILE --output-FILE # 不使用逗号,使用 = 符号 -i <file>, --input <file> # 使用逗号,不使用 = 符号
為選項新增描述說明,只需要用兩個空格分隔選項和說明即可。
--coefficient=K The K coefficient [default: 2.95] --output=FILE Output file [default: test.txt] --directory=DIR Some directory [default: ./]
如果選項是可以重複的,那麼它的值
[default: ...]
了解 使用模式格式 和 選項描述格式 之後,再配合給的範例就能較好的理解了。
接下來就是得到輸入的資訊了。在前面提到arguments参数是一个字典类型,包含了用户输入的选项和参数信息,还是上面的代码段例子,假如我们从命令行运行的输入是
python3 test.py ship Guardian move 100 150 --speed=15
那么打印arguments参数如下:
{'--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}
从打印信息可以看到,对于选项,使用布尔型来表示用户是否输入了该选项,对于参数,则使用具体值来表述。
这样一来,程序就可以从arguments变量中得到下一步的操作了。若是用户什么参数都没输入,则打印Usage说明提示输入内容。
以上是使用Python中的命令列參數解析工具之docopt詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!