使用docopt双破折号选项和可选参数?

时间:2015-06-18 18:49:55

标签: python docopt

使用docopt,有没有办法制作一个双击参数,可以使用和不使用等号?

我想要使用以下两个命令--tls为true:

cmd --tls
cmd --tls=true

我似乎只能使用

让一个或另一个工作
Options:
  --tls

Options:
  --tls=false                  

用逗号分隔它们似乎不起作用

Options:
  --tls, --tls=false                  

1 个答案:

答案 0 :(得分:0)

我有同样的问题。 我找不到解决方案,但这是我所拥有的最佳解决方法:

cmd
cmd tls
cmd tls --true
cmd tls --false

因此参数选项为:

"""
Usage:
    script.py [--tls [<tlsval>]]
"""
from docopt import docopt
arguments = docopt(__doc__)
assert arguments['<tlsval>'] in (None, 'true', 'false'), "invalid tls value -- expected true or false"

请注意,这是区分大小写的,如果您将TLS大写,则可能会出现错误:https://github.com/docopt/docopt/issues/460

另一个选择:

"""
Usage:
   script.py [--MAS|--GPI [RESEND|ADD|REMOVE|SKU]]

Options:
    --MAS                   only do MAS step
    --GPI                   only do GPI step, optionally specify ADD/REMOVE/SKU (default is RESEND)
        RESEND            only GPI, strategy=RESEND (default for --GPI)
        ADD               only GPI, strategy=ADD
        REMOVE            only GPI, strategy=REMOVE
        SKU               only GPI, strategy=SKU
"""
from docopt import docopt
arguments = docopt(__doc__)
strategy = [k for k in ['RESEND', 'ADD', 'REMOVE', 'SKU'] if arguments[k]]
strategy = strategy[0] if strategy else "RESEND" #resend is default

对不起,所有编辑内容,但这里还有一个:

{{1}}

这会为您带来--argument,但在--argument之后不能有=