Множество вариантов с docopt
Я хотел бы использовать docopt
для синтаксического анализа командной строки, которая может получать одну и ту же опцию несколько раз. Может ли кто-нибудь объяснить мне, как это сделать?
Пример теста:
#!/usr/bin/env python """ Test program. Usage: test.py -v Options: -v Flag that should be counted """ import docopt print docopt.docopt(__doc__)
Если я запустил это с помощью test.py -v
, я получаю:
{'-v': True}
Где, как если бы я запускал это с помощью test.py -vv
, он отображает сообщение об использовании (указывающее, что командная строка недопустима).
Я хотел бы настроить документацию по опции, чтобы docopt
возвращал мне:
{'-v': 1}
Когда прошло только 1 -v
и:
{'-v': 3}
Если, скажем, пользователь прошел -vvv
. Это почти такая же функциональность, как и действие count
в argparse .
- Вопрос Django manage.py
- Как узнать, запущена ли программа из командной строки или из Интернета?
- -s означает простой английский
- Python в командной строке не переключается
- Можно ли включить параметры командной строки в python shebang?
После того, как вы выкопали список вопросов, связанных с docopt (закрытым), я обнаружил, что правильный способ представить это :
#!/usr/bin/env python """ Test program. Usage: test.py (-v ...) Options: -v Flag that should be counted """ import docopt print docopt.docopt(__doc__)
То есть, нужно использовать символ « ...
», чтобы указать, что опция может появляться несколько раз. В этом случае опция будет правильно подсчитана. Если вышеуказанная программа вызывается с помощью test.py -vvv
, она будет правильно печатать:
{'-v': 3}
Символ « ...
» также может использоваться с аргументами и параметрами, которые принимают аргументы почти одинаково, просто нажмите ссылку выше для примера этого.
(Это просто комментарий к вышеизложенному, но будет неудобно в качестве комментария.)
И это можно расширить до передачи списка в качестве аргумента:
""" Usage: program (--opt=OPT ...) Options: --opt=OPT An option that can be specified multiple times to form a list """ import docopt print docopt.docopt(__doc__)
И мы запускаем это как
python test.py --opt=first_option {'--opt': ['first_option']} python test.py --opt=first_option --opt="second in line" {'--opt': ['first_option', 'second in line']}
И так далее.
- Control-Alt-Delete из python или командной строки
- Как получить команду pydoc, работающую в Windows?
- Как определить, был ли запущен скрипт Python через командную строку?
- Как перемещаться во втором приглашении в python
- Python sys.argv вне диапазона, не понимаю, почему
- Как сделать перенаправление вывода оболочки (>), когда скрипт все еще запущен?
- Интерактивное построение с помощью Python через командную строку
- Как воспроизвести способ, которым PyCharm запускает мой проект Python 3.4 в командной строке?
- Сохранять историю команд между (i) сеансами python