docopt 和 docopt dispatch 的高階示例
與 docopt 一樣,使用[docopt_dispatch]可以在入口點模組的 __doc__
變數中建立 --help
。在那裡,你用 doc 字串作為引數呼叫 dispatch
,因此它可以在它上面執行解析器。
這樣做,而不是手動處理引數(通常最終在一個高圈的 if / else 結構中),你將它留給派遣只給你如何處理這組引數。
這就是 dispatch.on
裝飾器的用途:你給它應該觸發函式的引數或引數序列,並且該函式將以匹配的值作為引數執行。
"""Run something in development or production mode.
Usage: run.py --development <host> <port>
run.py --production <host> <port>
run.py items add <item>
run.py items delete <item>
"""
from docopt_dispatch import dispatch
@dispatch.on('--development')
def development(host, port, **kwargs):
print('in *development* mode')
@dispatch.on('--production')
def development(host, port, **kwargs):
print('in *production* mode')
@dispatch.on('items', 'add')
def items_add(item, **kwargs):
print('adding item...')
@dispatch.on('items', 'delete')
def items_delete(item, **kwargs):
print('deleting item...')
if __name__ == '__main__':
dispatch(__doc__)