Использование опции двойного тире 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

Это дает вам --аргумент, но не может иметь = после --аргумента

Другие вопросы по тегам