docopt——好用的Python命令行參數解釋器


Qingchat 使用的命令行參數解釋器是 docopt ,用下來感覺非常棒,所以決定介紹一下這個庫。( 奉勸各位看官,真愛生命,遠離argparse。 )

介紹

docopt 本質上是在 Python 中引入了一種針對命令行參數的形式語言,在代碼的最開頭使用""" 文檔注釋的形式寫出符合要求的文檔,就會自動生成對應的parse,體驗非常贊。

用法

樣例

docopt的使用非常簡單,以Qingchat為例,你只需要在代碼最開頭加入:

"""Qingchat CLI

Usage:
qingchat config ip <ip>
qingchat config port <port>
qingchat config login
qingchat group list
qingchat group choose <group_name>...
qingchat group clean
qingchat group send -t <content>
qingchat group send -i <media>
qingchat group send -f <file> [<delaytime>]

Options:
-h --help Show this screen.
-v --version Show version.
"""

然后在執行代碼中加入:

arguments = docopt(__doc__, version='Qingchat 0.3.2')

就會在你的程序中導入一個 arguments 字典,這個字典中的內容形如:

{
'-f': False,
'-i': False,
'-t': False,
'<content>': None,
'<file>': None,
'<group_name>': [],
'<ip>': '127.0.0.1',
'<media>': None,
'<port>': None,
'choose': False,
'clean': False,
'config': True,
'group': False,
'ip': True,
'list': False,
'login': False,
'port': False,
'send': False
}

這樣應該就能很容易看出來,我們在文檔中寫的每一個短語,都被轉化為一個對應的類型。只要直接調用 arguments['xxx'] 就可以判斷或者使用對應的值,從而實現對應的功能。

詳解

前面我們舉了一個例子,下面我們來詳細介紹一下如何完成一個符合 docopt 要求的注釋文檔。

Usage

所有出現在 usage: (區分大小寫)和一個空行之間的文本都會被識別為一個命令組合, usage 后的第一個字母將會被識別為這個程序的名字,所有命令組合的每一個部分(空格分隔)都會成為字典中的一個key。

參數

形如 <argument> 或者 ARGUMENT 的文本將會被識別為參數。

在轉化后的字典中的取值為 True 或者 False 。

Usage: my_program <host> <port>

選項

形如 -o 或者 --option 的文本將會被識別為選項。

在轉化后的字典中的取值為 True 或者 False 。

Usage: my_program -f <file>

Tips:

  • 短選項可以組合起來,比如 -abc 等價於 -a -b -c
  • 長選項需要的參數需要使用 = 或者空格來分隔, --input=ARG 等價於 --input ARG
  • 短選項可以不需要空格, -f FILE 等價於 -fFILE

命令

其他不滿足 --options 或者 <arguments> 的文本將會被識別為(子)命令。

在轉化后的字典中取值為 True 或者 False 。

可選項

形如 [optional elements] 的文本是可選項。

elements 包括上述的三種類型:參數,選項以及命令。

在相同或者不同的括號中都是一樣的:

Usage: my_program [command --option <argument>]

等價於

Usage: my_program [command] [--option] [<argument>]

必填項

形如 (required elements) 的文本是必填項。

上述三種元素默認都是必填項, () 符號用在一些比較特殊的情形下,比如:

Usage: my_program (--either-this <and-that> | <or-this>)

選擇項

形如 element|another 的文本是選擇項,你可以從中選擇一個值。

Usage: my_program go (--up | --down | --left | --right)

列表項

形如 element... 的文本是列表項,你可以輸入多個參數。

比如說:

Usage: my_program open <file>...

然后你可以通過 arguments['<file>'] 來訪問這個列表。

Option

Option 部分用於指定某些特殊情形,比如:

  • 將某個短參數與長參數關聯起來,比如 -i <file>, --input <file>
  • 某個選項有一個參數
  • 選項的默認值,比如 --coefficient=K The K coefficient [default: 2.95]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM