我正在使用该Click
库,但似乎找不到类似于dest
from的行为argparse
。
例如,我有
@click.option('--format', type=click.Choice(['t', 'j']))
def plug(format):
pass
请注意,我正在使用一个标志,它被翻译成一个不理想--format
的内置 Python 结构。format
有没有办法更改传递给选项点击功能的参数?
我正在使用该Click
库,但似乎找不到类似于dest
from的行为argparse
。
例如,我有
@click.option('--format', type=click.Choice(['t', 'j']))
def plug(format):
pass
请注意,我正在使用一个标志,它被翻译成一个不理想--format
的内置 Python 结构。format
有没有办法更改传递给选项点击功能的参数?
虽然Click
没有dest
-equivalent of argparse
,但它具有某些可以被利用的参数命名行为。具体来说,对于具有多个可能名称的参数,它将更喜欢非虚线名称而不是虚线名称,并且作为次要偏好将优先考虑较长的名称而不是较短的名称。
网址:http ://click.pocoo.org/dev/parameters/#parameter-names
因此,如果您将选择声明为...
@click.option('--format', 'not-format', type=click.Choice(['t', 'j']))
...然后 Click 将优先考虑非虚线变量 ( '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
将选项重命名为不同命名的函数参数可以通过使用
@click.option('--format', '-f', 'format_arg_name')
def plug(format_arg_name):
print(format_arg_name)
然后它将重新映射命名的选项format
并使其可用作format_arg_name
参数。
format_arg_name
不能作为命令行选项使用,但是--format
和-f
是。