我正在尝试使用 Python 库Click,但很难让示例正常工作。我定义了两组,其中一组 ( group2
) 用于处理这组命令的常用参数。我想要实现的是这些公共参数由组函数(group2
)处理并分配给上下文变量,因此它们可以被实际命令使用。
一个用例是一些需要用户名和密码的命令,而另一些则不需要(甚至不是可选的)。
这是代码
import click
@click.group()
@click.pass_context
def group1(ctx):
pass
@click.group()
@click.option('--optparam', default=None, type=str)
@click.option('--optparam2', default=None, type=str)
@click.pass_context
def group2(ctx, optparam):
print 'in group2', optparam
ctx['foo'] = create_foo_by_processing_params(optparam, optparam2)
@group2.command()
@click.pass_context
def command2a(ctx):
print 'command2a', ctx['foo']
@group2.command()
@click.option('--another-param', default=None, type=str)
@click.pass_context
def command2b(ctx, another_param):
print 'command2b', ctx['foo'], another_param
# many more more commands here...
# @group2.command()
# def command2x():
# ...
@group1.command()
@click.argument('argument1')
@click.option('--option1')
def command1(argument1, option1):
print 'In command2', argument1, option1
cli = click.CommandCollection(sources=[group1, group2])
if __name__ == '__main__':
cli(obj={})
这是使用 command2 时的结果:
$ python cli-test.py command2 --optparam=123
> Error: no such option: --optparam`
这个例子有什么问题。我试图密切关注文档,但opt-param
似乎没有得到认可。