7

我在我的简单 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}

重复元素后如何让其他选项起作用?

4

1 回答 1

11
于 2014-02-15T22:22:50.430 回答