带有 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
我有一个使用 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