首頁  >  文章  >  後端開發  >  使用Python中的命令列參數解析工具之docopt詳細介紹

使用Python中的命令列參數解析工具之docopt詳細介紹

高洛峰
高洛峰原創
2017-03-28 09:22:421872瀏覽

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

##有些mac可能不支援直接pip 指令,需要先安裝pip

方法二

也可以在github上下載原始碼(docopt是開源專案),然後透過

python setup.py install 安裝

安裝docopts

安裝docopts就必須使用上面安裝docopt的方法二,在GitHub上下載原始碼,然後使用python安裝,下載位址

##docopt 的實作簡單分析在Python 中有這麼一個屬性

__doc__

,它的值是字串,一般表示幫助訊息,而docopt 正是利用了這個屬性,把幫助資訊替換成命令列參數解析說明,再對它進行解析即可。

舉個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__ == &#39;__main__&#39;:
 arguments = docopt(__doc__, version=&#39;Naval Fate 2.0&#39;)
 print(arguments)

上述程式碼片段中,很大一段幫助資訊就是我們的命令列參數解析說明,在函數入口處調用docopt函數進行解析,返回的arguments變量是一個字典型變量,它記錄了選項是否被選用了,參數的值是什麼等信息,當程序從命令行運行時,我們就是根據arguments變數的記錄來得知使用者輸入的選項和參數資訊。

所以如何寫好命令列參數解析說明就變得至關重要了,命令列解析資訊包含兩個部分,分別是使用模式格式和選項描述格式。

使用模式格式(Usage pattern format)#使用模式以usage:開始,以空白行結束,如上程式碼片段所示,它主要描述了使用者新增命令列參數時的格式,也就是使用時的格式,解析也是按照此格式來進行的。

每一個使用模式都包含以下元素:


* 參數


參數使用大寫字母或使用尖括號a8093152e673feb7aba1828c43532094圍起來。


* 選項


選項以短橫線開始-或--。只有一個字母時格式-o,多於一個字母時--output。同時還可以把多個單字母的選項合併,-ovi等同於-o、-v、-i。選項也能有參數,此時別忘了為選項新增描述說明。

接下來是使用模式中用到的一些標識的意義,正確地使用他們能夠更好的完成解析任務:

##* []

代表可選的元素,方括號內的元素可有可無

* ()

代表必須要有的元素,括號內的元素一定要有,哪怕是多個裡面選一個。

* |

互斥的元素,豎線兩旁的元素只能有一個留下

* ...

代表元素可以重複出現,最後解析的結果是一個清單

* [options]

指定特定的選項,完成特定的任務。

選項描述格式(Option description format)

#選項描述同樣必不可少,尤其是當選項有參數,並且還需要為它賦默認值時。

為選項新增參數的格式有兩種:

-o FILE --output-FILE  # 不使用逗号,使用 = 符号
-i <file>, --input <file> # 使用逗号,不使用 = 符号

為選項新增描述說明,只需要用兩個空格分隔選項和說明即可。

為選項新增預設值時,把它加到選擇描述後面即可,格式如下[default: 809c117b6283c5ca6a505e8118a92b6d]

--coefficient=K The K coefficient [default: 2.95]
--output=FILE Output file [default: test.txt]
--directory=DIR Some directory [default: ./]

如果選項是可以重複的,那麼它的值
[default: ...]

將會一個list列表,若不可以重複,則它的值是一個字串。

使用

了解 使用模式格式 和 選項描述格式 之後,再配合給的範例就能較好的理解了。

接下來就是得到輸入的資訊了。

在前面提到arguments参数是一个字典类型,包含了用户输入的选项和参数信息,还是上面的代码段例子,假如我们从命令行运行的输入是


python3 test.py ship Guardian move 100 150 --speed=15

那么打印arguments参数如下:


{&#39;--drifting&#39;: False,
 &#39;--help&#39;: False,
 &#39;--moored&#39;: False,
 &#39;--speed&#39;: &#39;15&#39;,
 &#39;--version&#39;: False,
 &#39;<name>&#39;: [&#39;Guardian&#39;],
 &#39;<x>&#39;: &#39;100&#39;,
 &#39;<y>&#39;: &#39;150&#39;,
 &#39;mine&#39;: False,
 &#39;move&#39;: True,
 &#39;new&#39;: False,
 &#39;remove&#39;: False,
 &#39;set&#39;: False,
 &#39;ship&#39;: True,
 &#39;shoot&#39;: False}

从打印信息可以看到,对于选项,使用布尔型来表示用户是否输入了该选项,对于参数,则使用具体值来表述。

这样一来,程序就可以从arguments变量中得到下一步的操作了。若是用户什么参数都没输入,则打印Usage说明提示输入内容。

以上是使用Python中的命令列參數解析工具之docopt詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn