【问题标题】:Behaviour of the docopt module (argument parser)docopt 模块的行为(参数解析器)
【发布时间】:2020-03-11 20:24:54
【问题描述】:

我目前是第一次使用 docopt 库,所以我肯定做错了什么

我的脚本是:

"""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 或错误,我不明白为什么不是这样..

感谢您的帮助!

【问题讨论】:

    标签: python docopt


    【解决方案1】:

    你就快到了,只需要在参数周围加上“<...>”:

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

    【讨论】:

    • 嗨,感谢您的帮助。我发现了问题:这是因为我的帮助中的行是制表缩进的,而不是空格缩进的,并且通过用空格替换制表,现在可以正常工作了..我有在 docopt github 上发布一个关于该问题的问题。
    【解决方案2】:

    问题在于以前版本的 docopt 不能使用表格缩进。 实际版本可以,而且 PEP8 还是建议使用空格。

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

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

    并将不同的选项及其描述放在Options 部分中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多