Укажите допустимые значения для аргументов, используя docopt

Я пытаюсь использовать Docopt в первый раз. Пока что это заявление об использовании, которое я имею:

Test Control Program

Usage: 
  test.py bitwrite ([--off=<bits>...][--on=<bits>...])
  test.py regwrite ([regA | regB]<value>)

Options:
  -o <bits>... --off <bits>...  #Turn bits off
  -i <bits>... --on <bits>...   #Turns bits on

Итак, у меня нет проблем с test.py bitwrite -o bitA, bitB, bitC, bitD

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

Есть ли способ указать это с помощью оператора использования? Я перепробовал несколько вещей и ничего не получалось.

1 ответ

Решение

Вы можете указать их в отдельной части __doc__, В качестве примера -

Test Control Program

Usage: 
  test.py bitwrite ([--off=<bits>...][--on=<bits>...])
  test.py regwrite ([regA | regB]<value>)

Options:
  -o <bits>... --off <bits>...  #Turn bits off
  -i <bits>... --on <bits>...   #Turns bits on

Arguments:

      bits: 1 - on
            0 - off

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

В приведенном выше Arguments В разделе будут показаны действительные значения для битов и другие аргументы.

Затем, запустив вышеупомянутый документ с параметром --help, вы получите результат как -

>>>> python a.py --help
Test Control Program

Usage:
  test.py bitwrite ([--off=<bits>...][--on=<bits>...])
  test.py regwrite ([regA | regB]<value>)

Options:
  -o <bits>... --off <bits>...  #Turn bits off
  -i <bits>... --on <bits>...   #Turns bits on

Arguments:

      bits: 1 - on
            0 - off

Если вы хотите показать полный __doc__ без необходимости указывать --help или же -h вариант, вы можете поймать DocoptExit исключение при вызове docopt() функция и распечатать __doc__ в это время.

Пример -

"""Test Control Program

Usage: 
  test.py bitwrite ([--off=<bits>...][--on=<bits>...])
  test.py regwrite ([regA | regB]<value>)

Options:
  -o <bits>... --off <bits>...  #Turn bits off
  -i <bits>... --on <bits>...   #Turns bits on

Arguments:

      bits: 1 - on
            0 - off

"""
from docopt import docopt, DocoptExit


if __name__ == '__main__':
    try:
        arguments = docopt(__doc__, version='Test Control Program')
        print(arguments)
    except DocoptExit:
        print(__doc__)
Другие вопросы по тегам