Использование опции двойного тире docopt с необязательным параметром?
Используя docopt, есть ли способ сделать параметр с двумя пунктирными линиями, который работает со знаком равенства и без него?
Я хочу, чтобы обе следующие команды сделали --tls истинным:
cmd --tls
cmd --tls=true
Кажется, я могу заставить работать одну или другую, используя
Options:
--tls
или же
Options:
--tls=false
Разделение их запятой не похоже на работу
Options:
--tls, --tls=false
0 ответов
У меня такая же проблема. Я не могу найти решение, но вот лучший способ обхода, который у меня есть:
"""
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
Это дает вам --аргумент, но не может иметь = после --аргумента