Python Click: Как изменить значение `info_name` для глобального контекста - PullRequest
2 голосов
/ 18 февраля 2020

В сценарии Python, использующем Click для обработки командной строки, я хотел бы изменить info_name в глобальном контексте (чтобы изменить вывод справки).

Вот надуманный минимальный пример mycmd.py, где я пытаюсь использовать context_settings:

import click

CONTEXT_SETTINGS = dict(info_name="hallo")

@click.command('mycmd', context_settings=CONTEXT_SETTINGS)
@click.pass_context
def click_cli(ctx):
   pass

click_cli()

Однако, когда я запускаю этот скрипт с python mycmd.py --help, я получаю трассировку:

...
  File ".../click/core.py", line 639, in make_context
    ctx = Context(self, info_name=info_name, parent=parent, **extra)
TypeError: type object got multiple values for keyword argument 'info_name'

Так что проблема в том, что аргументы в **extra (на этом заканчиваются context_settings) не могут перезаписать жестко запрограммированный параметр info_name=info_name. Как я могу это сделать?

1 Ответ

0 голосов
/ 18 февраля 2020

Используйте параметр prog_name для функции cli, чтобы изменить имя справки (info_name), например:

cli(prog_name='hallo')

Код теста:

import click

@click.command('mycmd')
@click.pass_context
def cli(ctx):
    pass

cli(['--help'], prog_name='hallo')

Результаты:

Usage: hallo [OPTIONS]

Options:
  --help  Show this message and exit.
...