从docopt

时间:2017-06-09 12:19:28

标签: python docopt

通过docopt文档和示例,我似乎无法找到这个功能,但我觉得它应该存在,所以我想我要确保。

我正在使用docopt for Python,并希望能够允许任意选项。用例是命令行模板实用程序 - 因此任意键值都很方便。

"""Templator

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

希望示例说明我所追求的是什么。也许像--*=<value>之类的东西可能是另一种写作方式。

编辑:

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

templator <template> (<key> <value>)...

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

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

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

1 个答案:

答案 0 :(得分:2)

也许你可以使用

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