Докопт экстремально не интуитивное использование опионов
Докопт любит писать много документации, и я не могу найти ни одного фактического вызова командной строки на их многих страницах о том, как писать раздел комментариев. У меня есть этот очень простой файл:
"""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 ответ
Прежде всего, почему вы вызываете свой сценарий дважды?
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)