4

我想用于解析可以多次接收相同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}

当仅-v通过 1 并且:

{'-v': 3}

比如说,如果用户通过了-vvv. 这与argparse中的count操作几乎相同。

4

2 回答 2

7

在挖掘了 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}

符号“ ...”也可以与参数和采用几乎相同方式的参数一起使用,只需点击上面的链接以获取示例。

于 2013-08-28T12:18:45.793 回答
2

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

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

"""
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']}

等等。

于 2014-05-09T15:05:41.197 回答