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__)