Docopt的使用极其不直观

  • 本文关键字:直观 Docopt python docopt
  • 更新时间 :
  • 英文 :


Docopt喜欢写很多文档,因为在他们关于如何写注释部分的许多页面中,我似乎找不到一个实际的命令行调用。我有一个非常简单的文件:

"""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.

说真的吗?

首先,为什么要调用脚本两次?

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]

括号表示该选项不是强制选项,请使用((表示强制选项。

还有一点,即使你第一次调用show error,options也不应该出现在dictionary中,也许你应该在文档中留下空白。无论是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)