【问题标题】:Option multiplicity with docopt带有 docopt 的选项多重性
【发布时间】:2013-08-30 08:37:15
【问题描述】:

我想使用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 的功能几乎相同。

【问题讨论】:

    标签: python command-line argparse docopt


    【解决方案1】:

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

    符号“...”也可以用于参数和接受参数的选项几乎相同的方式,只需点击上面的链接获取示例。

    【讨论】:

    • 这可以扩展为将列表作为参数传递
    • @KaushikGhose 可以像这样传递一个列表:`--input-files a.csv b.csv --output-files c.csv d.csv'?你到底是什么意思?
    • @TheUnfunCat 更像是:--input-files a.csv --input-files b.csv --output-files c.csv --output-files d.csv
    • 谢谢。这意味着那时无法进行通配(即使单击也不允许以这种方式使用可变长度选项...)
    【解决方案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']}
    

    等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多