Docopt - несколько значений для необязательного аргумента - PullRequest
0 голосов
/ 10 октября 2019

Я хотел бы проанализировать необязательный аргумент с несколькими значениями с 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.

1 Ответ

1 голос
/ 10 октября 2019

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

"""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']}
...