如何在 Python Click 中将选项的默认值设置为另一个参数?
How to set default value of option to another argument in Python Click?
是否可以将选项的默认值定义为点击中的另一个参数?
我想要的是这样的:
@click.command()
@click.argument('project')
@click.option('--version', default=project)
def main(project, version):
...
如果选项 --version
为空,它将自动采用 project
的值。这样的事情可能吗?
您可以尝试将版本设置为 None。如果用户设置它,它将被覆盖,但如果他们不设置它,您将其设置到主函数中的项目。
@click.command()
@click.argument('project')
@click.option('--version', default=None)
def main(project, version):
if version is None:
version = project
print("proj", project, "vers", version)
if __name__ == "__main__":
main()
用法示例:
$ python3 clicktest.py 1
proj 1 vers 1
$ python3 clicktest.py 1 --version 2
proj 1 vers 2
要在装饰器中执行此操作,您可以利用 callback
选项,它接受 (context, param, value)
:
import click
@click.command()
@click.argument('project')
@click.option('--version', default=None,
callback=lambda c, p, v: v if v else c.params['project'])
def main(project, version):
print("proj", project, "vers", version)
if __name__ == "__main__":
main()
是否可以将选项的默认值定义为点击中的另一个参数?
我想要的是这样的:
@click.command()
@click.argument('project')
@click.option('--version', default=project)
def main(project, version):
...
如果选项 --version
为空,它将自动采用 project
的值。这样的事情可能吗?
您可以尝试将版本设置为 None。如果用户设置它,它将被覆盖,但如果他们不设置它,您将其设置到主函数中的项目。
@click.command()
@click.argument('project')
@click.option('--version', default=None)
def main(project, version):
if version is None:
version = project
print("proj", project, "vers", version)
if __name__ == "__main__":
main()
用法示例:
$ python3 clicktest.py 1
proj 1 vers 1
$ python3 clicktest.py 1 --version 2
proj 1 vers 2
要在装饰器中执行此操作,您可以利用 callback
选项,它接受 (context, param, value)
:
import click
@click.command()
@click.argument('project')
@click.option('--version', default=None,
callback=lambda c, p, v: v if v else c.params['project'])
def main(project, version):
print("proj", project, "vers", version)
if __name__ == "__main__":
main()