【问题标题】:docopt positional mandatory arguments keeping delimiters in name?docopt 位置强制参数在名称中保留分隔符?
【发布时间】:2016-01-28 01:17:42
【问题描述】:

我正在尝试一个非常简单的 python 脚本,只有位置参数,由 docopt 处理。

#!/usr/bin/env python

opt_spec = """Test

Usage: docopt_test (import | export <output_file> <output_format>)
       docopt_test (-h | --help)
       docopt_test (-v | --version)

Options:
  -h --help     Show this screen.
  -v --version     Show version.

"""

from docopt import docopt

if __name__ == '__main__':
    arguments = docopt(opt_spec, version='Test 1.0')
    print(arguments)

运行时会打印:

./docopt_test.py export file.xml xml
{'--help': False,
 '--version': False,
 '<output_file>': 'file.xml',
 '<output_format>': 'xml',
 'export': True,
 'import': False}

问题在于 output_file 和 output_format 参数在名称中保留了 &lt; 和 &gt; 分隔符,使得像 args['output_file'] 这样的调用是不可能的。从用法字符串中删除分隔符会改变语义,使选项变成关键字。

有没有办法解决这个问题而不必诉诸 args['&lt;output_file&gt;'] 之类的用法?

【问题讨论】:

    标签: python command-line-arguments docopt


    【解决方案1】:

    我认为这被认为是调度的一部分,它可能具有各种特定于语言的含义。 docopt-dispatch 有一个实验项目,它似乎可以用 Python 注释很好地处理它。我有一个名为 snippets 的程序,我在其中重新映射了我自己的调度风格中的参数名称,但我通过调用 args 来做到这一点,就像你做的那样。

    【讨论】:

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