使用python单击将未指定的选项添加到cli命令

使用python单击将未指定的选项添加到cli命令,python,python-click,Python,Python Click,我想使用python click library向cli命令添加未指定的选项。因此,我的cli函数可以如下所示 $ my-cmd --option1 value1 --options2 value2 --unknown_var value3 我当前的代码: import click @click.option('--option1') @click.option('--option2') @click.command(name='my-cmd') def cli(option1, optio

我想使用python click library向cli命令添加未指定的选项。因此,我的cli函数可以如下所示

$ my-cmd --option1 value1 --options2 value2 --unknown_var value3
我当前的代码:

import click

@click.option('--option1')
@click.option('--option2')
@click.command(name='my-cmd')
def cli(option1, option2):
  click.echo("my test")
我希望看到如下内容:

import click

@click.option('--option1')
@click.option('--option2')
@click.command(name='my-cmd')
def cli(option1, option2, **kwargs):
  click.echo("my test")
  # Manually manage **kwargs

您可以通过
context
传递
ignore\u unknown\u选项
allow\u extra\u args
设置,额外的参数将收集在
context.args
列表中(
['--unknown\u var',value3','--unknown\u var2',value4']
)。然后你可以把它转换成dict

import click

@click.command(name='my-cmd', context_settings=dict(
    ignore_unknown_options=True,
    allow_extra_args=True,
))
@click.option('--option1')
@click.option('--option2')
@click.pass_context
def cli(ctx, option1, option2):
    click.echo({ctx.args[i][2:]: ctx.args[i+1] for i in range(0, len(ctx.args), 2)})
范例

python cli.py --option1 value1 --option2 value2 --unknown_var value3 --unknown_var2 value4
>> {'unknown_var2': 'value4', 'unknown_var': 'value3'}

请参阅。

如果您愿意接受
my cmd--option1 value1--unknown\u var value3--另一个未知var值4
,那么您可以一起使用和。此外,如果您想支持args(以-)和options(以-)的话,您可能需要使用类似
{(ctx.args[i][2:]If str ctx.args[i])。startswith(“-”)else ctx.args[i][1:):范围(0,len(ctx.args),2)中的i的ctx.args[i+1]
我将使用带列表理解的剥离和拆分。这看起来更干净:
data=dict([item.strip('--').split('='))用于ctx.args中的项)