在 docopt 中指定一个选项一次或多次
Specify an option one or more times in 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>
但其中 none 有效。另一种方法是使选项完全可选并在程序中检查它的值:
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>
也工作。
我有一个程序(在 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>
但其中 none 有效。另一种方法是使选项完全可选并在程序中检查它的值:
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>
也工作。