Использование форматирования с помощью Docopt

У меня проблема с моими операторами использования в docopt.

Вот как я ожидаю, что использование будет работать в сценарии. Необязательные параметры (определенные с помощью []), я хотел бы иметь возможность использовать их вместе или по отдельности. Таким образом, -t -o или -o или -t должны быть действительными. В данный момент я не могу использовать -o без -t. Если я использую канал | для их разделения, я не могу использовать оба одновременно. Я пробовал разные комбинации. Кажется, я не могу заставить его работать так, как мне нравится. Может ли кто-нибудь указать, где я ошибаюсь?

"""
Description:

Script does stuff

Usage:
  script.py (-d <ditem>) (-u <uitem>) (-p <pitem>) (-s <sfile>) [-t <tfile>] [-o <ofile>] [-v]
  script.py (-d <ditem>) (-l) [-t <tfile>] [-o <ofile>] [-v]
  script.py -h | --help
  script.py --version

Options:
  -v --verbose       Does stuff
  -t --tfile         Does stuff
  -o --output        Does stuff
  -l --litem         Does stuff
  -u --uitem         Does stuff
  -p --pitem         Does stuff
  -d --ditem         Does stuff
  -s --sitem         Does stuff
  -h --help          Show this screen.
  --version          Show version.
  """

person iNoob    schedule 31.03.2014    source источник


Ответы (2)


Я смог решить эту проблему, используя следующее:

Добавление строк использования script.py (-d <ditem>) (-l) ([-t <tfile>] | [-o <ofile>]) [-v] и еще одной script.py (-d <ditem>) (-l) [-t <tfile>] [-o <ofile>] [-v] означает, что я могу использовать -t и -o независимо или -t -o вместе. Однако я не могу использовать их в таком порядке -o -t.

Description:

Script does stuff

Usage:
  script.py (-d <ditem>) (-u <uitem>) (-p <pitem>) (-s <sfile>) [-t <tfile>] [-o <ofile>] [-v]
  script.py (-d <ditem>) (-l) ([-t <tfile>] | [-o <ofile>]) [-v]
  script.py (-d <ditem>) (-l) [-t <tfile>] [-o <ofile>] [-v]
  script.py -h | --help
  script.py --version
person iNoob    schedule 01.04.2014

Чтобы разрешить -t одновременно, -o одновременно, -t и -o вместе:

Script does stuff.

Usage:
   script.py [-t] [-o] 

Options:
  -t --tfile         Does stuff
  -o --output        Does stuff

Если -t и -o отсутствуют, это ошибка:

Script does stuff.

Usage:
   script.py -t
   script.py -o
   script.py -t -o

Options:
  -t --tfile         Does stuff
  -o --output        Does stuff
person jfs    schedule 01.04.2014
comment
Я уже решил это, спасибо. Мой ответ выше исправляет это, но, к сожалению, я не могу принять свой ответ как ответ - person iNoob; 01.04.2014
comment
@iNoob: ваш ответ содержит противоречивое использование, например, (a | b) в одной строке и только a b в другой. - person jfs; 01.04.2014