如何在docopt中构建无序参数?

问题描述 投票:0回答:1

我正在尝试构建一个接受一组选项的docopt用法。

Naval Fate.

Usage:
  naval_fate.py ship
  [-b <b_command>]
  [-e <e_command>]

可运行的例子:http://try.docopt.org/?doc=Naval+Fate.%0D%0A%0D%0AUsage%3A%0D%0A++naval_fate.py+ship%0D%0A++%5B-b+%3Cb_command%3E%5D%0D%0A++%5B-e+%3Ce_command%3E%5D&argv=ship+-e+c+

如果我使用它,它工作正常:

ship -b barg -e earg

输出是:

{
  "-b": true, 
  "-e": true, 
  "<b_command>": "barg", 
  "<e_command>": "earg", 
  "ship": true
}

但是如果使用它,它仍然给相应的参数赋予相同的值:

ship -e earg -b barg 

输出:

{
  "-b": true, 
  "-e": true, 
  "<b_command>": "earg", 
  "<e_command>": "barg", 
  "ship": true
}

请注意,我将earg传递给-e,但它在输出中被分配给b_command。

我在golang的docopt-go包中看到了同样的行为。我的用法字符串错了吗?如果是这样,我应该如何构建docopt用法字符串,以便它为正确的参数分配正确的值并尊重指定的参数?

go docopt
1个回答
0
投票
naval_fate.py ship
[-b <b_command>]
[-e <e_command>]

您编写的docopt的解释如下:

  • 子命令ship
  • 在任何顺序中跟随以下零个或多个: 布尔标志-b, 位置论证<b_command>, 布尔标志-e, 位置论证<e_command>

因此,以下所有内容都将被视为合法输入命令:

naval_fate.py ship -e
naval_fate.py ship BB -e
naval_fate.py ship -eb
naval_fate.py ship BB EE

表达像-b <b_command>-e <e_command>这样的标志的正确方法是通过一个名为Options的部分。

Naval Fate.

Usage:
  naval_fate.py ship [options]

Options:
  -b <b_command>   Description of -b
  -e <e_command>   Description of -e
© www.soinside.com 2019 - 2024. All rights reserved.