docopt模块的行为(参数解析器)

时间:2016-03-08 15:46:08

标签: python docopt

我目前第一次使用docopt lib,所以我肯定做错了

我的脚本是:

"""prog

Usage:
    prog.py (-h | --help)
    prog.py (--version)
    prog.py -s TAG [-t NB_NUC]

Options:
    -h, --help   help
    --version    version
    -s TAG       Some TAG I want.
    -t NB_NUC    A number of nuc.
"""

如果我写:     python prog.py -s SMT

我明白了:

{'--help': False,
    '--version': False,
    '-h': False,
    '-s': True,
    '-t': True,
    'NB_NUC': None,
    'TAG': 'SMT'}

它似乎是正确的,但如果我写:

python prog.py -s -t 10 -> TAG contain 10 (instead of None)
python prog.py -t 10 -s SMT -> TAG contain always 10 (instead of SMT) and NB_NUC contain SMT (instead of 10)
python prog.py -s SMT -t -> TAG contain SMT and NB_NUC contain None (and its what I expected on this way)

所以,我尝试了很多组合,但我不明白这是怎么回事......

我想要的是TAG总是包含与-s参数对应的值,如果在-s之后没有给出,则为None或错误,我不明白为什么不是这种情况..

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

你几乎就在那里,只需要"< ...>"围绕论点:

"""prog

Usage:
    prog.py (-h | --help)
    prog.py (--version)
    prog.py -s TAG [-t NB_NUC]

Options:
    -h, --help   help
    --version    version
    -s TAG       Some TAG I want.
    -t NB_NUC    A number of nuc.
"""

答案 1 :(得分:0)

问题来自以下事实:以前的docopt版本不适用于列表式缩进。 实际版本支持,PEP8建议仍然使用空格。

对于格式化,最简单的方法是只写

Usage:
    prog.py (-h | --help)
    prog.py (-v | --version)
    prog.py [options] <mandatory_file>

并在Options部分中放置差异选项及其描述。