docopt——好用的Python命令行参数解释器
Qingchat?使用的命令行參數解釋器是?docopt?,用下來感覺非常棒,所以決定介紹一下這個庫。(?奉勸各位看官,真愛生命,遠離argparse。?)
介紹
docopt 本質上是在 Python 中引入了一種針對命令行參數的形式語言,在代碼的最開頭使用"""?文檔注釋的形式寫出符合要求的文檔,就會自動生成對應的parse,體驗非常贊。
用法
樣例
docopt的使用非常簡單,以Qingchat為例,你只需要在代碼最開頭加入:
"""Qingchat CLIUsage:
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]必填項
形如?(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]
總結
以上是生活随笔為你收集整理的docopt——好用的Python命令行参数解释器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang中的图像image处理之马赛
- 下一篇: 联想-G480-参数