2016-02-23 31 views
3

我正在使用Click库,但我似乎无法找到类似dest从​​的行为。Python单击库重命名参数

例如,我有

@click.option('--format', type=click.Choice(['t', 'j'])) 
def plug(format): 
    pass 

请注意,我使用的是标志和--format是被转换成一个内置Python构建format这是不理想的。

有没有办法改变传递到选项的点击功能的参数?

+0

这里只是一个元注释,你应该小心你选择哪个标签来陪伴你的问题。这个'click'标签与您的问题无关,因为它指的是鼠标点击。 – BlackVegetable

+0

好点。删除:) –

+0

这新引入了我的python点击库,最初给我留下了深刻的印象。但是,深入阅读这些文档,我还没有找到argparse这个简单(有用)的功能。多可惜。 :( – BlackVegetable

回答

6

虽然Click没有dest-等效​​,它具有一定的参数命名行为,可以利用。具体而言,对于具有多个可能名称的参数,它将优先选择非虚线为虚线名称,而次优选将优先于较短名称的较长名称。

网址:http://click.pocoo.org/dev/parameters/#parameter-names

所以,如果你申报你的选择,因为...

@click.option('--format', 'not-format', type=click.Choice(['t', 'j'])) 

...然后点击将优先非虚变种('not-format'),并与not_format=...参数调用你的函数。

当然这也意味着这种替代拼写也可以在命令行中使用。如果不希望的话,我想你可以添加一个装饰重命名关键字参数:

import functools 

def rename_kwargs(**replacements): 
    def actual_decorator(func): 
     @functools.wraps(func) 
     def decorated_func(*args, **kwargs): 
      for internal_arg, external_arg in replacements.iteritems(): 
       if external_arg in kwargs: 
        kwargs[internal_arg] = kwargs.pop(external_arg) 
      return func(*args, **kwargs) 
     return decorated_func 
    return actual_decorator 

测试代码:

if __name__ == '__main__': 

    @rename_kwargs(different_arg='format') 
    def tester(different_arg): 
     print different_arg 

    tester(format='test value') 

测试输出:

$ python test_decor.py 
test value 

在你的情况,它看起来像:

@click.option('--format', type=click.Choice(['t', 'j'])) 
@replace_kwargs(not_format='format') 
def plug(not_format): 
    pass 
+0

有关“可以利用的某些参数命名行为”的行为已被明确记录(尽管我没有找到它,直到一位同事指出我的意思)http://click.pocoo.org/5/parameters/#parameter-names –

+1

在我看来像'return func(* args,** kwargs)'是一个级别太深... –

+0

@HubertKario很好,赶上,谢谢!固定。 – Lav

1

如果你有

@click.option('--format', '-f', format_arg_name) 
def plug(format_arg_name): 
    print(format_arg_name) 

装点你的方法,然后将映射选项将format_arg_name参数。

format_arg_name将不会在命令行上可用。