我想使用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
。这几乎是相同的功能the count
action in argparse。
答案 0 :(得分:7)
在挖掘docopt(已关闭)问题列表后,I have found that the right way to represent this将是:
#!/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}
符号“...
”也可以与带有参数的参数和选项一起使用,只需点击上面的链接就可以得到一个例子。
答案 1 :(得分: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']}
等等。