首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用docopt的选项多重性

使用docopt的选项多重性
EN

Stack Overflow用户
提问于 2013-08-27 14:22:14
回答 2查看 2.8K关注 0票数 4

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

一个测试示例:

代码语言:javascript
复制
#!/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运行这个程序,我会得到:

代码语言:javascript
复制
{'-v': True}

当我使用test.py -vv运行时,它会显示使用消息(指示命令行无效)。

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

代码语言:javascript
复制
{'-v': 1}

当只传递了一个-v,并且:

代码语言:javascript
复制
{'-v': 3}

如果,比如说,用户传递了-vvv。这与 action in argparse的功能基本相同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-28 12:18:45

在挖掘docopt (已关闭的)问题列表之后,I have found that the right way to represent this将是:

代码语言:javascript
复制
#!/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调用的,它将正确地打印:

代码语言:javascript
复制
 `{'-v': 3}` 

符号"...“也可以与参数和选项一起使用,这些参数和选项与参数的方式基本相同,只需点击上面的链接即可。

票数 7
EN

Stack Overflow用户

发布于 2014-05-09 15:05:41

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

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

代码语言:javascript
复制
"""
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__)

我们把这个作为

代码语言:javascript
复制
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']}

诸若此类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18468123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档