我正在尝试使用docopt创建命令行界面 . 这是我的文件的简化版本:
#!/usr/bin/env python
"""
Test program.
Usage:
test.py [options]
Options:
-a <input>
-b
-c
-d
"""
import docopt
print docopt.docopt(__doc__)
我基本上希望能够以任何顺序指定任何选项 . 但是,如果我忘记为 -a
标志指定参数,那么我得到一个这样的输出:
$ python test.py -a -b -c
{"-a": "-b",
"-b": False,
"-c": True,
"-d": False}
Docopt将 -b
标志视为 -a
标志的参数,而不是将输入视为无效 . 是否有一些简单的方法可以检测到这一点,或者让docopt拒绝接受这种格式错误的输入?
2 回答
关于短选项有一些含糊之处:更好地使用--option = ARG long选项:
-Short选项可以在可选空格后指定参数:-f FILE等效于-fFILE .
注意,写入 - 输入ARG(与--input = ARG相对)是不明确的,这意味着无法判断ARG是选项的参数还是位置参数 . 在使用模式中,只有在提供该选项的选项说明(如下所述)时,才会将此参数解释为带参数的选项 . 否则,它将被解释为单独的选项和位置参数 . 与-f FILE和-fFILE表示法相同的歧义 . 虽然在后一种情况下,不可能判断它是多个堆叠的短选项,还是带参数的选项 . 仅当提供选项的描述时,这些符号才会被解释为带参数的选项 .
这基本上是一个设计决策,该选项的参数可以是任意字符串 . 我们正在讨论这是否是一个好的决定 .