docopt 在文档字符串中使用 [default: 0]
故意忽略您问题的argparse 部分,这里是您如何使用docopt 定义默认值。
使用docopt,您可以将默认值(以及几乎所有其他值)定义为文档字符串的一部分。
首先,安装docopt 并用于验证值schema
$ pip install docopt schema
然后编写脚本a.py:
"""
Usage:
a.py [--quality <qlimit>]
a.py -h
Options:
--quality=<qlimit> Quality limit [default: 0]
"""
def main(quality):
print "FROM MAIN: minimal quality was set to", quality
if __name__ == "__main__":
from docopt import docopt
from schema import Schema, And, Use, SchemaError
args = docopt(__doc__)
print args
schema = Schema({
"--quality":
And(Use(int), lambda n: 0 <= n, error="<qlimit> must be non-negative integer"),
"-h": bool
})
try:
args = schema.validate(args)
except SchemaError as e:
exit(e)
quality = args["--quality"]
main(quality)
并使用脚本,首先请求帮助字符串:
$ python a.py -h
Usage:
a.py [--quality <qlimit>]
a.py -h
Options:
--quality=<qlimit> Quality limit [default: 0]
然后使用默认值:
$ python a.py
{'--quality': '0',
'-h': False}
FROM MAIN: minimal quality was set to 0
将非默认正确的 1 设置为 5:
$ python a.py --quality 5
{'--quality': '5',
'-h': False}
FROM MAIN: minimal quality was set to 5
尝试不允许的负值:
$ python a.py --quality -99
{'--quality': '-99',
'-h': False}
<qlimit> must be non-negative integer
或非整数一:
$ python a.py --quality poor
{'--quality': 'poor',
'-h': False}
<qlimit> must be non-negative integer
注意,一旦validate 步骤通过,“--quality”键的值就已经转换为int。