首页 文章

无法在docopt中实现重复元素

提问于
浏览
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']}

我该如何解决?

1 回答

  • 1

    这种表示法:

    >>> 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']}
    

相关问题