使用python-click为cli命令添加未指定的选项

ait*_*rhh 8 python python-click

我想使用python-click库向cli命令添加未指定的选项.所以我的cli功能可能如下所示

$ my-cmd --option1 value1 --options2 value2 --unknown_var value3
Run Code Online (Sandbox Code Playgroud)

我目前的代码:

import click

@click.option('--option1')
@click.option('--option2')
@click.command(name='my-cmd')
def cli(option1, option2):
  click.echo("my test")
Run Code Online (Sandbox Code Playgroud)

我希望看到如下内容:

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
Run Code Online (Sandbox Code Playgroud)

r-m*_*m-n 16

你可以通过context使用ignore_unknown_optionsallow_extra_args设置,额外的参数将在收集context.args列表(['--unknown_var', 'value3', '--unknown_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 xrange(0, len(ctx.args), 2)})
Run Code Online (Sandbox Code Playgroud)

python cli.py --option1 value1 --option2 value2 --unknown_var value3 --unknown_var2 value4
>> {'unknown_var2': 'value4', 'unknown_var': 'value3'}
Run Code Online (Sandbox Code Playgroud)

请参阅转发未知选项.