Docopt:为什么不解析这个用法?

时间:2018-04-07 04:37:32

标签: docopt

我的用法:

Usage:
  prog at (<v1> [<v1>]) [(before <v2>)] (alarm|email)

我的命令行args:

at 4 alarm

我似乎很清楚atalarm的外观将模糊值[{1}}定位为4v1。由于v2始终由v2引导,我们可以告诉before4

然而,它没有被解析。见我try it

任何人都知道为什么它没有被解析,以及如何使用最小的用户更改来解析它?请注意,在使用中,我正在尝试实现更自然的语言类型的接口,因此重新排列语法可能有点困难。

编辑:

几次尝试:

注意:在github上询问同样的问题:https://github.com/docopt/docopt/issues/412

1 个答案:

答案 0 :(得分:0)

Docopt似乎不支持其他参数前面的可选参数,除非它们是选项。您尝试解析at 4 before alarm表示before被识别为<v1>的第二个位置参数。

{
  "<v1>": [
    "4", 
    "before"
  ], 
  "<v2>": null, 
  "alarm": true, 
  "at": true, 
  "before": false, 
  "email": false
}

我建议将可选的位置参数移到最后。

Usage:
  prog [options] (alarm|email) at <v1> [<v1>]

Options:
  -b, --before <v2>   Do something before