Краткий ответ на ваш вопрос: ваши требования противоречат тому, что делает модуль.
Рассмотрим 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}