Один из способов, которым мне удалось добиться такого поведения, заключался в использовании аргументов, как показано ниже. Я опубликую это в качестве обходного пути, пока я попытаюсь выяснить, можно ли это сделать с помощью какой-либо опции, и обновлю свой пост соответствующим образом
@click.command(context_settings={"ignore_unknown_options": True})
@click.argument("options", nargs=-1)
def myscript(options):
option = False
if options is ():
option = False
if '-o' in options or '--option' in options:
option = True
if len(options) > 1:
option = options[1]
print(option)
Позже Редактирование Использование Я смог добиться этого, добавив аргумент в определение команды.
@click.command()
@click.option('-o', '--option', is_flag=True, default=False, is_eager=True)
@click.argument('value', nargs=-1)
def myscript(option, value):
if option and value != ():
option = value[0]
print(option)
nargs
можно удалить, если ожидается, что последует не более одного аргумента, и его можно рассматривать как не требуется.
@click.command()
@click.option('-o', '--option', is_flag=True, default=False, is_eager=True)
@click.argument('value', required=False)
def myscript(option, value=None):
if option and value is not None:
option = value
print(option)
Это также может быть возможно путем объединения генератора контекста и сохранения некоторого состояния, но это кажется наименее желательным решением, поскольку вы полагаетесь на контекст, хранящий ваше состояние.