首页 文章

选项多样性与docopt

提问于
浏览
4

我想使用 docopt 来解析可以多次接收 the same 选项的命令行 . 有人可以解释一下怎么做吗?

一个测试例子:

#!/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 .

2 回答

  • 2

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

    符号“ ... ”也可以与带有参数的参数和选项一起使用,只需点击上面的链接就可以得到一个例子 .

  • 7

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

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

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

    等等 .

相关问题