Python 单击:如果设置了标志,则忽略缺少参数错误
Python Click: ignore missing argument error if a flag is set
我想制作一个简单的 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():
...
...
第一个命令导致缺少参数错误。可以有解决方法,例如 nargs=-1
或 required=False
,但是,这似乎会使帮助页面完全消失或 name
参数在帮助消息中被标记为可选,在大多数用例中并非如此。
如果指定了某个选项,是否有一种简单的方法可以使 Click 不引发 Missing Argument 错误?
进一步阅读文档后,我发现 this section,它提供了一种实现 --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
我想制作一个简单的 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():
...
...
第一个命令导致缺少参数错误。可以有解决方法,例如 nargs=-1
或 required=False
,但是,这似乎会使帮助页面完全消失或 name
参数在帮助消息中被标记为可选,在大多数用例中并非如此。
如果指定了某个选项,是否有一种简单的方法可以使 Click 不引发 Missing Argument 错误?
进一步阅读文档后,我发现 this section,它提供了一种实现 --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