带有 Python 的点击库的任意命令行关键字

Arbitrary command line keywords with Python's click library

我有一个使用 Python 的 click 库构建的命令行工具。我想扩展此工具以使用用户定义的关键字,如下所示:

$ my-cli --foo 10 --bar 20

通常我会在我的命令中添加以下代码

@click.option('--foo', type=int, default=0, ...)

但是在我的例子中,有一些关键字是用户定义的。我不会知道用户想要提前 sepcify foo 或 bar 或其他东西。

一个解决方案

目前,我最好的解决方案是使用字符串并自己进行解析

$ my-cli --resources "foo=10 bar=20"

哪个可行,但稍微不那么令人愉快。

我认为这应该可行:

import click


@click.command(context_settings=dict(ignore_unknown_options=True,))
@click.option('-v', '--verbose', is_flag=True, help='Enables verbose mode')
@click.argument('extra_args', nargs=-1, type=click.UNPROCESSED)
def cli(verbose, extra_args):
    """A wrapper around Python's timeit."""
    print(verbose, extra_args)


if __name__ == "__main__":
    cli()

测试:

$ python test.py --foo 12
False ('--foo', '12')

$ python test.py --foo 12 -v
True ('--foo', '12')

发件人:http://click.pocoo.org/5/advanced/#forwarding-unknown-options