我正在尝试为点击装饰器创建一个包装装饰器@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() 参数 https://stackoverflow.com/q/77168894/2173773了解背景信息。
问题在于你如何构建装饰器。在这种情况下,您将绕过 click.option,这是不必要的。当您创建一个装饰器来包裹另一个装饰器(例如 click.option)时,您应该考虑装饰器是从下到上工作的。这是更新后的代码:
import click
def foo_option(func):
return click.option('--foo', required=True)(func)
@click.command()
@foo_option
def bar1(foo: str) -> None:
print(f"bar1: {foo}")
if __name__ == '__main__':
bar1()
当您运行该脚本时,您将获得预期的输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)