我在我的简单 Python 程序中使用了 docopt :
#!/usr/bin/env python
"""
Farmers market
Usage:
farmersmarket.py buy -i <item> -q <quantity> [<quantity>] [-p <price>] [-dvh]
farmersmarket.py -d | --debug
farmersmarket.py -v | --version
farmersmarket.py -h | --help
Options:
-i --item Item.
-q --quantity Quantity.
-p --price Price.
-d --debug Show debug messages.
-h --help Show this screen.
-v --version Show version.
"""
from docopt import docopt
print docopt(__doc__)
如果我运行:
farmersmarket.py buy --item eggs --quantity 100 115 --price 0.25
预期的行为是以 0.25 的价格购买介于 100 和 115 之间的随机数量的鸡蛋。至少在解释论点时,这没有问题。换句话说, docopt得到了预期的一切:
{'--debug': False,
'--help': False,
'--item': True,
'--price': True,
'--quantity': True,
'--version': False,
'<item>': 'eggs',
'<price>': '0.25',
'<quantity>': ['100', '115'],
'buy': True}
但是,有时我不想购买随机数量的鸡蛋,而是购买特定数量的鸡蛋。在这种情况下,该--quantity
选项只接受一个参数:
farmersmarket.py buy --item eggs --quantity 471 --price 0.25
但这失败了,因为docopt解释--price 0.25
为的重复元素--quantity
并失去了 的值<price>
:
{'--debug': False,
'--help': False,
'--item': True,
'--price': True,
'--quantity': True,
'--version': False,
'<item>': 'eggs',
'<price>': None,
'<quantity>': ['471', '0.25'],
'buy': True}
重复元素后如何让其他选项起作用?