我在virtualenv下使用Click并使用entry_pointsetuptools中的指令将根映射到一个名为dispatch的函数.
我的工具公开两个子serve和config,我使用在顶级组的选项,以确保用户总是通过一个--path指令.但用法结果如下:
mycommand --path=/tmp serve
Run Code Online (Sandbox Code Playgroud)
无论是serve和config子命令需要确保用户始终在传递路径和理想,我想目前的CLI为:
mycommand serve /tmp` or `mycommand config validate /tmp
Run Code Online (Sandbox Code Playgroud)
当前基于Click的实现如下:
# cli root
@click.group()
@click.option('--path', type=click.Path(writable=True))
@click.version_option(__version__)
@click.pass_context
def dispatch(ctx, path):
"""My project description"""
ctx.obj = Project(path="config.yaml")
# serve
@dispatch.command()
@pass_project
def serve(project):
"""Starts WSGI server using the configuration"""
print "hello"
# config
@dispatch.group()
@pass_project
def config(project):
"""Validate or initalise a configuration file"""
pass
@config.command("validate")
@pass_project
def config_validate(project):
"""Reports on the validity of …Run Code Online (Sandbox Code Playgroud)