【问题标题】:Accepting arbitrary options from docopt接受来自 docopt 的任意选项
【发布时间】:2017-09-10 00:20:33
【问题描述】:

查看 docopt 文档和示例,我似乎无法找到此功能,但我觉得它应该存在,所以我想我会要求确定。

我正在为 Python 使用 docopt,并且希望能够允许任意选项。用例是一个命令行模板实用程序 - 所以任意键值会很方便。

"""Templator

Usage:
    templator <template> [--arbitrary-option=<value>]...
"""

希望这个例子能说明我所追求的。也许像--*=&lt;value&gt; 这样的东西会是另一种写法。

编辑:

这是我目前采用键值对的解决方案。但是,这些是由空格分隔的,因此很难弄清楚长语句的键和值是什么。

templator &lt;template&gt; (&lt;key&gt; &lt;value&gt;)...

然后在 python 脚本中(对于任何对此解决方案感兴趣的人)

arguments = docopt(__doc_)
arbitrary_kwargs = dict(zip(arguments['<key>'], arguments['<value>']))

拥有key=value 语法将是理想的 - 如果可能的话。

【问题讨论】:

    标签: python docopt


    【解决方案1】:

    也许你可以使用

    """Templator
    
    Usage:
        templator <template> [-c <name>=<value>]...
    """
    

    docopt/examples/git/git.py 就是这样做的。

    这是一个测试示例:

    bash-3.2$ cat test.py
    """ Usage:
        Templator [-c <name>=<value>]...
    """
    import sys, docopt
    args = docopt.docopt(__doc__, version='0.0.1-alpha')
    print str(args)
    
    bash-3.2$ python test.py
    {'-c': 0,
     '<name>=<value>': []}
    
    bash-3.2$ python test.py -c foo=1
    {'-c': 1,
     '<name>=<value>': ['foo=1']}
    
    bash-3.2$ python test.py -c foo=1 -c baz=2
    {'-c': 2,
     '<name>=<value>': ['foo=1', 'baz=2']}
    

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 2018-11-04
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      相关资源
      最近更新 更多