Docopt — несколько значений для необязательного аргумента

Я хотел бы проанализировать необязательный аргумент с несколькими значениями с помощью docopt. Ниже приведен пример использования.

my_program.py --loc pcg acc
# or anything that achieve similar result

и после синтаксического анализа я ожидаю, что у него будет такой список python

arguments["--loc"] = ["pcg", "acc"]

Я просмотрел и выяснил, возможно ли это в argparse, передав аргумент nargs.

Я не смог найти аналогичный способ в docopt, возможно ли это в docopt? Если нет, то какая альтернатива?

Альтернатива, которую я могу придумать, - попросить пользователя указать значение, разделенное запятой, и вручную разделить его во время синтаксического анализа, как показано ниже.

my_program.py [--loc=<comma_separated_str>]

В коде python

locs = arguments["--loc"].split(",") if arguments["--loc"] else []

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


person Darren Christopher    schedule 10.10.2019    source источник


Ответы (1)


Одним из подходов может быть использование оператора многоточия (...), чтобы параметр можно было повторить ноль или более раз с квадратными скобками или один или несколько раз с круглыми скобками. Например

"""Usage: my_program.py --help
       my_program.py [--loc=<loc>]...
"""

from docopt import docopt
print(docopt(__doc__))

даст следующий вывод

$ python my_program.py --loc=pcg --loc=acc
{'--help': False,
 '--loc': ['pcg', 'acc']}
person J. P. Petersen    schedule 10.10.2019