Python单击:如果设置了标志,则忽略缺少的参数错误

Python单击:如果设置了标志,则忽略缺少的参数错误,python,command-line-interface,python-click,Python,Command Line Interface,Python Click,我想制作一个简单的CLI程序,该程序将接受--edit config选项以在编辑器中打开其配置。但是,如果我只指定了--edit config标志,我不知道如何使Click ignore Missing参数出错 导入单击 @click.group(调用\u而不调用\u命令=True) @单击参数(“名称”) @单击。选项(“--edit config”,is_flag=True) def cli(名称、编辑配置): #如果我们像这样运行它 #$myprog--编辑配置|缺少参数:NAME 如果编

我想制作一个简单的CLI程序,该程序将接受
--edit config
选项以在编辑器中打开其配置。但是,如果我只指定了
--edit config
标志,我不知道如何使Click ignore Missing参数出错

导入单击
@click.group(调用\u而不调用\u命令=True)
@单击参数(“名称”)
@单击。选项(“--edit config”,is_flag=True)
def cli(名称、编辑配置):
#如果我们像这样运行它
#$myprog--编辑配置|缺少参数:NAME
如果编辑配置:
单击.echo(“编辑配置”)
...
出口(0)
#但这是主要的功能
#$myprog John
click.echo(f“Hello,{name}”)
@cli.command()命令
def命令_a():
...
...
第一个命令导致缺少参数错误。可以有一些变通方法,比如
nargs=-1
required=False
,但是,这似乎会使帮助页面完全消失,或者在帮助消息中将
name
参数标记为可选,这在大多数用例中都不是真的


如果指定了某个选项,是否有一种简单的方法使Click not raise Missing Argument出错?

在进一步阅读我找到的文档后,它提供了一种实现
--编辑配置
或完全改变执行流的任何其他选项的方法

def edit_config(ctx、参数、值):
如果不是值或ctx.U解析:
返回
单击.echo(“编辑配置”)
ctx.exit()
@click.group(调用\u而不调用\u命令=True)
@单击参数(“名称”)
@click.option(“--edit config”,is_flag=True,callback=edit_config,
is_eager=True,expose_value=False)
def cli(名称):
打印(f“你好,{name}!”)
@cli.command()命令
def howareyou():
打印(f“你好吗?”)
$myapp John
你好,约翰!
$myapp John你好吗
你好,约翰!
你好吗?
$myapp--编辑配置
编辑配置
$myapp--帮助
用法:myapp[OPTIONS]NAME命令[ARGS]。。。
选项:
--编辑配置
--帮助显示此消息并退出。
命令:
你好吗

您可以在click decorator中指定默认名称,或者将代码置于if name:条件下。为什么--edit config是一个选项,而不是与command_a处于同一级别的命令?@Stephernauch我认为
--edit config
比整个子命令更简洁,因为我计划的用法是:default command:
myapp John->Hello John
,其他一些操作:
myapp John bye->bye John
myapp--edit config
仅编辑配置。在除编辑配置(使用
click.edit()
)之外的所有用法中,您可以指定John作为整个程序的参数,然后对其执行任何需要的操作。因此,在我看来,使用一个选项从本质上完全改变程序的行为似乎更符合逻辑。@EricTruett
default=”“
的行为类似于
nargs=-1
,它将帮助页面中的参数标记为可选的,而不是真的,并且当没有任何内容传递给
myapp
时,它还会中断帮助页面
default=None
不会更改任何内容,仍然会引发缺少参数错误。如果名称:…出现错误,则将代码放入
中无效,因为它永远无法到达。