2015-10-05 51 views
3

我想使用python單擊庫向cli命令添加未指定的選項。所以,我的CLI函數可能看起來像下面使用python單擊將未指定的選項添加到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 
+0

如果您願意接受'my-cmd --option1 value1 - --unknown_var value3 --another-unknown-var value 4',那麼您可以使用[Option Like Arguments](http://click.pocoo .org/5/arguments /#option-like-arguments)和[Variadic Arguments](http://click.pocoo.org/5/arguments/#variadic-arguments)。 – ecerulm

回答

5

你可以通過contextignore_unknown_optionsallow_extra_args設置,額外的參數將收集在context.args列表中(['--unknown_var', 'value3', '--unknown_var2', 'value4'])。然後你可以把它轉換成字典。

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)}) 

例如

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

參見Forwarding Unknown Options