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