在Docopt中指定选项一次或多次

  • 本文关键字:一次 Docopt 选项 docopt
  • 更新时间 :
  • 英文 :


我有一个程序(在python中,但这没关系(,该选项一次或多次,例如:

# Valid cases:
python test.py --o 1 --p a <file>
python test.py --o 1 --o 2 --p a --p b <file>
# Invalid:
python test.py --o a <file>
python test.py --p a <file>
python test.py <file>

此脚本有效:

#!/usr/bin/env python2.7
"""Test
Usage:
  test.py --o=<arg> [--o=<arg>...] --p=<arg> [--p=<arg>...] <file>
"""
from docopt import docopt

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

但是,重复该选项,感觉很丑陋。我尝试了以下内容:

test.py --o=<arg>[...] --p=<arg>[...] <file>
test.py (--o=<arg>)[...] (--p=<arg>)[...] <file>
test.py (--o=<arg>[...]) (--p=<arg>[...]) <file>

,但它们都没有工作。替代方案是使选项完全选项并在程序中检查其值:

  test.py [--o=<arg>...] [--p=<arg>...] <file>
  ...
  if len(arguments["--o"]) < 1:
    raise ValueError("One or more --o required")
  if len(arguments["--p"]) < 1:
    raise ValueError("One or more --p required")

,但我觉得直接使用DocOpt可以使用一个简单的解决方案。有一种美丽的方法吗?

有点晚,但是

Usage:
  test.py (--o=<arg>)... (--p=<arg>)... <file>

做你想要的。

Usage:
  test.py (--o=<arg>...) (--p=<arg>...) <file>

也可以工作。

相关内容

  • 没有找到相关文章

最新更新