带有docopt的选项多重性



我想使用docopt来解析一个可以多次接收相同选项的命令行。有人能给我解释一下怎么做吗?

测试示例:

#!/usr/bin/env python
"""
Test program.
Usage:
    test.py -v
Options:
    -v  Flag that should be counted
"""
import docopt
print docopt.docopt(__doc__)

如果我用test.py -v运行这个,我得到:

{'-v': True}

其中,就好像我用test.py -vv运行它一样,它会显示用法消息(指示命令行无效)。

我想调整选项文档,以便docopt返回我:

{'-v': 1}

当仅通过1个-v和:时

{'-v': 3}

例如,如果用户通过了-vvv。这与argparse中的count操作的功能基本相同。

在挖掘了docopt(已关闭)问题列表后,我发现表示这一问题的正确方法是:

#!/usr/bin/env python
"""
Test program.
Usage:
    test.py (-v ...)
Options:
    -v  Flag that should be counted
"""
import docopt
print docopt.docopt(__doc__)

也就是说,必须使用符号"..."来表示一个选项可能出现多次。在这种情况下,选项将被正确计数。如果用test.py -vvv调用上述程序,它将正确打印:

{'-v': 3}

符号"..."也可以与参数和选项一起使用,这些参数和选项采用的方式几乎相同,只需点击上面的链接即可获得示例。

(这只是对以上内容的评论,但作为评论会很尴尬。)

这可以扩展到传递一个列表作为参数:

"""
Usage:
program (--opt=OPT ...)
Options:
  --opt=OPT    An option that can be specified multiple times to form a list
"""
import docopt
print docopt.docopt(__doc__)

我们将其作为运行

python test.py --opt=first_option
{'--opt': ['first_option']}
python test.py --opt=first_option --opt="second in line"
{'--opt': ['first_option', 'second in line']}

等等。

相关内容

  • 没有找到相关文章

最新更新