Как указать один необязательный аргумент несколько раз в docopt

Я хотел бы спроектировать свое приложение командной строки таким образом, чтобы одна опция, назовем ее comment, могла быть указана несколько раз, например,

$ ./my_app.py --comment="Comment 1" --comment="Comment 2"

Можно ли это сделать с помощью docopt? Я проверил домашнюю страницу docopt, но не смог найти никаких ссылок на несколько вхождений одного и того же необязательного аргумента.


person andreas-h    schedule 09.12.2013    source источник
comment
Я не уверен насчет docopt, но с argparse вы можете сделать это с помощью append action   -  person smeso    schedule 09.12.2013


Ответы (2)


Для справки: официальные документы можно найти здесь, на github.

Чтобы ответить на ваш конкретный вопрос, вы можете использовать многоточие ... с дополнительным параметром [--my-option] и указать, что ваш параметр принимает аргумент.

I.e. [--my-option=ARG]... or [--my-option=<arg>]...

Пример:

"""
Usage:
    my_program [--comment=ARG]... FILE

Arguments:
    FILE       An argument for passing in a file.

Options:
    --comment  Zero or more comments
"""

Указав его как [--comment=<arg>]..., вы гарантируете, что opt['--comment'] будет списком всех указанных комментариев.

Выполнение: my_program --comment=ASDF --comment=QWERTY my_file

Приводит к:

if __name__ == '__main__':
    opts = docopt(__doc__)
    opts['--comment'] == ['ASDF', 'QWERTY']
    opts['FILE'] == 'my_file'
person tgray    schedule 07.03.2014

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

my_program [comment]...

Это указывает на то, что comment является необязательным и может повторяться.

person Simeon Visser    schedule 09.12.2013
comment
Но опускает часть --comment: в моем случае у меня есть другие обязательные позиционные аргументы, и это было бы трудно различить и потенциально неоднозначно. (например, я хотел бы ./myprog.py --comment "ASDF" --comment "QWERTY" my_file) - person Thanatos; 05.03.2014