使用 docopt,有没有办法制作一个可以使用和不使用等号的双虚线参数?
我希望以下两个命令都使 --tls 为真:
cmd --tls
cmd --tls=true
我似乎只能通过使用来让其中一个工作
Options:
--tls
或者
Options:
--tls=false
用逗号分隔它们似乎不起作用
Options:
--tls, --tls=false
我也有同样的问题。我找不到解决方案,但这是我所拥有的最好的解决方法:
"""
Usage:
test.py [tls [--true|--false]]
"""
from docopt import docopt
arguments = docopt(__doc__)
if arguments['tls'] and not (arguments['--true'] or arguments['--false']):
arguments['--true'] = True
所以参数选项将是:
cmd
cmd tls
cmd tls --true
cmd tls --false
请注意,这是区分大小写的,如果您将 TLS 大写,可能会有错误:https ://github.com/docopt/docopt/issues/460
另外的选择:
"""
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"
抱歉所有的编辑,但这里还有一个:
"""
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
这个给你--argument但不能在--argument之后有=