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