Докопт экстремально не интуитивное использование опионов - PullRequest
0 голосов
/ 15 декабря 2018

Докопт любит писать много документации, поскольку я не могу найти ни одного фактического вызова командной строки на их многих страницах о том, как писать раздел комментариев.У меня есть очень простой файл:

"""Main.py
Usage:
  main.py controller
  main.py model
  main.py form
  main.py -h | --help
  main.py --version
Options:
  -h --help     Show this screen.
  --version     Show version.
  --outfile     Output file.
"""
from docopt import docopt


if __name__ == '__main__':
    arguments = docopt(__doc__, version='Main.py 1.0')
    print(arguments)

Я получаю первую часть:

adams-mbp:Aut adam$ python main.py model
{'--help': 0,
 '--outfile': None,
 '--version': 0,
 'Options:': False,
 'Show': 0,
 'controller': False,
 'file.': False,
 'form': False,
 'model': True,
 'screen.': False,
 'this': False,
 'version.': False}

Но я не могу понять, как передать параметр --outfile.Вот что я попробовал:

adams-mbp:Aut adam$ python main.py main.py --outfile thing
Usage:
  main.py controller
  main.py model
  main.py form
  main.py -h | --help
  main.py --version
Options:
  -h --help     Show this screen.
  --version     Show version.
  --outfile     Output file.

adams-mbp:Aut adam$ python main.py main.py --outfile=thing
Usage:
  main.py controller
  main.py model
  main.py form
  main.py -h | --help
  main.py --version
Options:
  -h --help     Show this screen.
  --version     Show version.
  --outfile     Output file.

adams-mbp:Aut adam$ python --outfile thing main.py main.py
Unknown option: --
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.

adams-mbp:Aut adam$ python --outfile=thing main.py main.py
Unknown option: --
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.

adams-mbp:Aut adam$ python main.py main.py -outfile thing
Usage:
  main.py controller
  main.py model
  main.py form
  main.py -h | --help
  main.py --version
Options:
  -h --help     Show this screen.
  --version     Show version.
  --outfile     Output file.

adams-mbp:Aut adam$ python main.py main.py -outfile=thing
Naval Fate.
Usage:
  main.py controller
  main.py model
  main.py form
  main.py -h | --help
  main.py --version
Options:
  -h --help     Show this screen.
  --version     Show version.
  --outfile         Output file.

adams-mbp:Aut adam$ python main.py main.py outfile=thing
Usage:
  main.py controller
  main.py model
  main.py form
  main.py -h | --help
  main.py --version
Options:
  -h --help     Show this screen.
  --version     Show version.
  --outfile     Output file.

Серьезно?

1 Ответ

0 голосов
/ 11 января 2019

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

python main.py main.py --outfile thing  # Will not work
python main.py --outfile thing  # This will be enough

Во-вторых, раздел использования docopt покажет вам другой способ вызова скрипта.

Usage:
  main.py controller
  main.py model
  main.py form
  main.py -h | --help
  main.py --version

main.py model работа, потому что это описано здесь.Но --outfile нигде в этом разделе использования не появляется, поэтому docopt рассматривает его как ложный ввод.И именно поэтому скрипт всегда возвращает справку.

Если вы хотите использовать эту опцию, вы должны описать ее в «Использование».

Вы можете сделать это так:

Usage:
  main.py controller
  main.py model [--outfile]

Скобка говорит о том, что опция не является обязательной, используйте () для обязательных опций.

Еще один момент, даже если вы впервые вызываете ошибки отображения, options не должно появляться в словаре, возможно, выследует оставить пустым, прежде чем в документации.Ни screen, ни this. и так далее ... Попробуйте что-то вроде этого:

"""Main.py

Usage:
    main.py controller [--outfile]
    main.py model [--outfile]
    main.py form [--outfile]
    main.py (-h | --help)
    main.py --version

Options:
    -h, --help     Show this screen.
    --version      Show version.
    --outfile      Output file.
"""
from docopt import docopt


if __name__ == '__main__':
    arguments = docopt(__doc__, version='Main.py 1.0')
    print(arguments)
...