溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python命令行參數解析工具 docopt 安裝和應用過程詳解

發(fā)布時間:2020-10-22 21:22:59 來源:腳本之家 閱讀:255 作者:海納百川_有容乃大 欄目:開發(fā)技術

什么是 docopt?

1、docopt 是一種 Python 編寫的命令行執(zhí)行腳本的交互語言。

它是一種語言!

它是一種語言!

它是一種語言!

2、使用這種語言可以在自己的腳本中,添加一些規(guī)則限制。這樣腳本在執(zhí)行的時候就必須按照這樣格式來執(zhí)行,同時,也可以很方便的編寫一些幫助信息(其實很多軟件在輸入 -h 的時候顯示信息 、例如 python -h ,會顯示所有的 python 指令,并且頁通過 docopt 限制了 python 指令的格式),下面是一些簡單的例子:

docopt 的安裝

docopt 有很多把版本,分別支持不同的語言,最簡單就是支持 python 語言,docopt.java 支持 java腳本,docopts 則是支持 shell 腳本的(下面的例子主要事以 docopts 為例)

1、安裝 docopt

方法一:      

pip install docopt

方法二:

也可以在 github 上下載源碼(docopt 是開源項目),然后通過 Python setup.py install 安裝

2、安裝 docopts 就必須使用上面的安裝docopt 的方法二來進行安裝,然后使用 python 安裝,下載地址:

https://github.com/docopt/docopts

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)

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

所以如何寫好命令行參數解析說明就很重要了,命令行解析信息包含兩部部分,分別是使用模式格式和選項描述格式。

使用模式格式(Usage pattern format)

使用模式格式 usage:開始,以空行結束,如上述代碼顯示,它主要描述了用戶添加命令含參數的格式,也就是使用時的格式,解析也是按照此格式來進行的。

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

* 參數

參數使用大寫字母或者使用尖括號<> 圍起來

* 選項

選項以短橫線開始 或者 --,只有一個字母時格式 -o,多于一個字母時 --output ,同時還可以把多個單字母的選選項合并, -ov 等同于 -o, -v, -i.。選項也能 

參數,此時別忘了給選項添加描述說明

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

* []

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

*()

代表必要有的元素,括號內的元素必須要有,哪怕時多個里面選一個

*|

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

* ....

代表元素可以重復出現,最后解釋的結果時一個列表

*[options]

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

選項描述格式(Options description format)

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

為選項添加參數的格式有兩種:

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

為選項添加描述說明,只需要用兩個空格分割選項和說明即可

為選項添加默認值時,把它添加到選擇描述后面即可,格式如下【defailt: <my-default-value>】  

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

如果選項時可以重復的,那么它的值 [default: ...] 將會是一個列表,若不可以重復,則它的值時一個字符串。

使用

理解了使用模式格式 和 選項描述格式之后,在配合給出的例子就能較好的理解了;

接下來就是得到輸入信息了

在前面提到 arguments 參數是一個字典類型,包含了用戶輸入的選項和參數信息,還是上面的代碼端例子,假如我們從命令行運行的輸入是

python 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 說明提示內容。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI