Принятие произвольных опций из docopt

Просматривая документацию и примеры docopt, я не могу найти эту функциональность, но я чувствую, что она должна существовать, поэтому я решил спросить, чтобы убедиться.

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

"""Templator

Usage:
    templator <template> [--arbitrary-option=<value>]...
"""

Надеюсь, что этот пример демонстрирует то, что мне нужно. Возможно, что-то вроде --*=<value> было бы альтернативным способом написания.

РЕДАКТИРОВАТЬ:

Вот мое текущее решение, которое принимает пары ключевых значений. Однако они разделены пробелами, поэтому может быть сложно понять, что такое ключи и значения для длинных операторов.

templator <template> (<key> <value>)...

Затем в скрипте python (для всех, кто интересуется этим решением)

arguments = docopt(__doc_)
arbitrary_kwargs = dict(zip(arguments['<key>'], arguments['<value>']))

Синтаксис key=value был бы идеальным - если это возможно.


person freebie    schedule 09.06.2017    source источник


Ответы (1)


Возможно, вы могли бы использовать

"""Templator

Usage:
    templator <template> [-c <name>=<value>]...
"""

это то, что docopt/examples/git/git.py делает.

Вот тестовый пример:

bash-3.2$ cat test.py
""" Usage:
    Templator [-c <name>=<value>]...
"""
import sys, docopt
args = docopt.docopt(__doc__, version='0.0.1-alpha')
print str(args)

bash-3.2$ python test.py
{'-c': 0,
 '<name>=<value>': []}

bash-3.2$ python test.py -c foo=1
{'-c': 1,
 '<name>=<value>': ['foo=1']}

bash-3.2$ python test.py -c foo=1 -c baz=2
{'-c': 2,
 '<name>=<value>': ['foo=1', 'baz=2']}
person jq170727    schedule 09.09.2017