我想使用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']}
等等。