我正在尝试为点击装饰器创建一个包装装饰器
@click.options('--foo', required=True)
:
import click
def foo_option(func):
orig_decorator = click.option('--foo', required=True)(func)
def decorator(*args, **kwargs):
orig_decorator(*args, **kwargs)
return decorator
@click.command()
@foo_option
def bar1(foo: str) -> None:
print(f"bar1: {foo}")
if __name__ == '__main__':
bar1()
这是行不通的。当我像
script.py --foo=1
一样运行它时,我收到错误:
Usage: script.py [OPTIONS]
Try 'script.py --help' for help.
Error: No such option: --foo
预期输出应该是:
bar1: 1
我错过了什么? 请参阅重构 @click.option() 参数了解背景信息。
您需要将您创建的函数包装在装饰器中,因为这是您调用的函数
import click
def foo_option(func):
@click.option('--foo', required=True)
def decorator(*args, **kwargs):
orig_decorator(*args, **kwargs)
return decorator
@click.command()
@foo_option
def bar1(foo: str) -> None:
print(f"bar1: {foo}")
if __name__ == '__main__':
bar1()