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)