Произвольные ключевые слова командной строки с библиотекой кликов Python

У меня есть инструмент командной строки, созданный с помощью библиотеки Python click. Я хочу расширить этот инструмент, чтобы использовать определяемые пользователем ключевые слова, такие как следующие:

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

Обычно я добавляю следующий код в свою команду

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

Однако в моем случае есть несколько ключевых слов, которые определяются пользователем. Я не буду знать, что пользователь хочет заранее указать foo или bar или что-то еще.

Одно решение

В настоящее время моим лучшим решением является использование строк и выполнение собственного синтаксического анализа.

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

Что будет работать, но немного менее приятно.


person MRocklin    schedule 22.11.2016    source источник
comment
Возможно, это поможет stackoverflow.com/questions/32944131/   -  person r-m-n    schedule 22.11.2016


Ответы (1)


Я думаю, что это должно работать:

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

person danielfrg    schedule 22.11.2016