AFAICT,这是不可能的点击。文件规定:
单击可严格分隔命令和子命令之间的参数。
这意味着特定命令的选项和参数
其他命令名。
一种可能的解决方法是编写
common_options
装饰工。下面的示例使用以下事实
click.option
是一个函数,返回一个修饰符函数,该函数期望以串联方式应用。瞧,下面是:
@click.option("-a")
@click.option("-b")
def hello(a, b):
pass
相当于:
def hello(a, b):
pass
hello = click.option("-a")(click.option("-b")(hello))
缺点是需要在所有子命令上设置公共参数。这可以通过
**kwargs
,它将关键字参数收集为dict。
这样,我们就可以制作一个程序:
import click
import functools
@click.group()
def cli():
pass
def common_options(f):
options = [
click.option("-a", is_flag=True),
click.option("-b", is_flag=True),
]
return functools.reduce(lambda x, opt: opt(x), options, f)
@cli.command()
@common_options
def hello(**kwargs):
print(kwargs)
# to get the value of b:
print(kwargs["b"])
@cli.command()
@common_options
@click.option("-c", "--citrus")
def world(citrus, a, **kwargs):
print("citrus is", citrus)
if a:
print(kwargs)
else:
print("a was not passed")
if __name__ == "__main__":
cli()