Выбор показан для каждого флага в argParser python - PullRequest
0 голосов
/ 14 апреля 2020
argParser.add_argument(
            "--operation",
            "-o",
            action="store",
            required=True,
            choices=["VIEW","ADD","EDIT","DELETE"],
            type=str.upper
        )

Фактический вывод:

root$ myArg -h
required arguments:
  --operation {VIEW,ADD,EDIT,DELETE,INFO}, -o {VIEW,ADD,EDIT,DELETE,INFO}

Требуемый вывод:

root$ myArg -h
required arguments:
  --operation/-o {VIEW,ADD,EDIT,DELETE,INFO}

Заранее спасибо

1 Ответ

0 голосов
/ 14 апреля 2020

Краткий ответ на ваш вопрос: ваши требования противоречат тому, что делает модуль.

Рассмотрим argparse.py:652 (версия 1.1; Anaconda3, python 3.7.6)

    # if the Optional takes a value, format is:
    #    -s ARGS, --long ARGS
    else:
        default = self._get_default_metavar_for_optional(action)
        args_string = self._format_args(action, default)
        for option_string in action.option_strings:
            parts.append('%s %s' % (option_string, args_string))

То, что вы видите, - это явно предназначенное поведение.

Я не вижу никаких очевидных параметров, которые бы изменили это поведение. Единственный вариант, который я вижу (после, по общему признанию, 3-х минутного просмотра), состоит в том, чтобы создать собственный форматировщик, точно такой же, как и по умолчанию, с переопределенным некорректным методом (_format_action_invocation), так что вы можете сделать что-то отличное от поведения при доставке.

Вот пример чего-то, что, по крайней мере, обладает способностью делать то, что вы хотите. Я скопировал код из argparse.py и изменил код, вызывающий нарушение, чтобы сделать то, что вы предпочитаете.

import argparse

class CustomFormatter(argparse.HelpFormatter):
    def _format_action_invocation(self, action):
        if action.option_strings and action.nargs != 0:
            # This is the code path that we don't like.
            default = self._get_default_metavar_for_optional(action)
            args_string = self._format_args(action, default)
            return '%s %s' % ('/'.join(action.option_strings), args_string)

        # For everything else, use the default behavior.
        return super()._format_action_invocation(action)

argParser = argparse.ArgumentParser( formatter_class = CustomFormatter )
argParser.add_argument(
            "--operation",
            "-o",
            action="store",
            required=True,
            choices=["VIEW","ADD","EDIT","DELETE"],
            type=str.upper
        )

argParser.parse_args()

Вот вывод:

# python soln.py --help
usage: soln.py [-h] --operation {VIEW,ADD,EDIT,DELETE}

optional arguments:
  -h, --help            show this help message and exit
  --operation/-o {VIEW,ADD,EDIT,DELETE}
...