我正在使用Click
库,但我似乎无法找到类似dest
从的行为。Python单击库重命名参数
例如,我有
@click.option('--format', type=click.Choice(['t', 'j']))
def plug(format):
pass
请注意,我使用的是标志和--format
是被转换成一个内置Python构建format
这是不理想的。
有没有办法改变传递到选项的点击功能的参数?
我正在使用Click
库,但我似乎无法找到类似dest
从的行为。Python单击库重命名参数
例如,我有
@click.option('--format', type=click.Choice(['t', 'j']))
def plug(format):
pass
请注意,我使用的是标志和--format
是被转换成一个内置Python构建format
这是不理想的。
有没有办法改变传递到选项的点击功能的参数?
虽然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
有关“可以利用的某些参数命名行为”的行为已被明确记录(尽管我没有找到它,直到一位同事指出我的意思)http://click.pocoo.org/5/parameters/#parameter-names –
在我看来像'return func(* args,** kwargs)'是一个级别太深... –
@HubertKario很好,赶上,谢谢!固定。 – Lav
如果你有
@click.option('--format', '-f', format_arg_name)
def plug(format_arg_name):
print(format_arg_name)
装点你的方法,然后将映射选项将format_arg_name
参数。
format_arg_name
将不会在命令行上可用。
这里只是一个元注释,你应该小心你选择哪个标签来陪伴你的问题。这个'click'标签与您的问题无关,因为它指的是鼠标点击。 – BlackVegetable
好点。删除:) –
这新引入了我的python点击库,最初给我留下了深刻的印象。但是,深入阅读这些文档,我还没有找到argparse这个简单(有用)的功能。多可惜。 :( – BlackVegetable