我想制作一个简单的 CLI 程序,该程序将接受--edit-config
在编辑器中打开其配置的选项。但是,如果我--edit-config
仅指定标志,我无法弄清楚如何使 Click 忽略缺少的参数错误。
import click
@click.group(invoke_without_command=True)
@click.argument("name")
@click.option("--edit-config", is_flag=True)
def cli(name, edit_config):
# If we run it like
# $ myprog --edit-config | Missing Argument: NAME
if edit_config:
click.echo("Editing config")
...
exit(0)
# But this is the main functionality
# $ myprog John
click.echo(f"Hello, {name}")
@cli.command()
def command_a():
...
...
第一个命令导致 Missing Argument 错误。可以有变通方法,例如nargs=-1
或required=False
,但是,这似乎使帮助页面要么完全运行要么name
在帮助消息中将参数标记为可选,这在大多数用例中并非如此。
如果指定了某个选项,是否有一种简单的方法可以使 Click 不引发 Missing Argument 错误?
在进一步阅读文档后,我发现了这一节,它提供了一种实现方式--edit-config
或任何其他完全改变执行流程的选项。
def edit_config(ctx, param, value):
if not value or ctx.resilient_parsing:
return
click.echo("Editing config")
ctx.exit()
@click.group(invoke_without_command=True)
@click.argument("name")
@click.option("--edit-config", is_flag=True, callback=edit_config,
is_eager=True, expose_value=False)
def cli(name):
print(f"Hello, {name}!")
@cli.command()
def howareyou():
print(f"How are you?")
$ myapp John
Hello, John!
$ myapp John howareyou
Hello, John!
How are you?
$ myapp --edit-config
Editing config
$ myapp --help
Usage: myapp [OPTIONS] NAME COMMAND [ARGS]...
Options:
--edit-config
--help Show this message and exit.
Commands:
howareyou
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句