3

docopt用来解析python中的命令行输入。我有我的文档字符串:

"""
Usage:
  docoptTest.py [options]

Options:
  -h --help                show this help message and exit
  -n --name <name>         The name of the specified person
"""

然后我导入 docopt 并解析参数并打印它们:

from docopt import docopt
args = docopt(__doc__)
print(args)

>>> python docoptTest.py -n asdf
{'--help': False,
 '--name': 'asdf'}

我尝试使用省略号来允许输入多个名称:

-n --name <name>...      The name of the specified person

但我得到了一个使用错误。然后我将省略号放在初始使用消息中:

"""
Usage:
  docoptTest.py [-n | --name <name>...] [options]

Options:
  -h --help                show this help message and exit
  -n --name                The name of the specified person
"""

但输出认为这--name是一个标志。

>>> python docoptTest.py -n asdf asdf
{'--help': False,
 '--name': True,
 '<name>': ['asdf', 'asdf']}

我该如何解决?

4

1 回答 1

2

这个符号:

>>> python docoptTest.py -n asdf asdf

可能不适用于 docopt,因为每个选项只接受一个参数。如果您想这样做,那么您可以使用某种分隔符,例如逗号,然后自己拆分。如果您添加一个参数,则会出现问题,那么解析器将无法区分最后一个asdf作为选项或参数的一部分。有些人还在=选项和它的论点之间加了一个。

也许你可以试试这个:

Usage:
  docoptTest.py [-n|--name <name>]... [options]

Options:
  -h --help                show this help message and exit
  -n --name <name>         The name of the specified person

这是做非常相似的事情的一种非常常见的方式。docopt 字典看起来像这样:

$python docoptTest.py -n asdf -n ads
{'--help': False,
 '--name': ['asdf', 'ads']}
$python docoptTest.py --name asdf --name ads
{'--help': False,
 '--name': ['asdf', 'ads']}
于 2016-11-02T09:43:07.050 回答