fbahr, я просто решил погрузиться в исходный код argparse .Я обнаружил, что форматирование использования жестко закодировано, посмотрите здесь .Единственный способ переопределить его - это наследование от HelpFormatter (класс по умолчанию, используемый при создании нового экземпляра ArgumentParser) и сказать парсеру использовать созданный вами класс, использовать свой собственный форматер .Вам нужно будет переопределить"приватный" метод (с префиксом подчеркивания) с именем _format_args , что немного уродливо и анти-шаблонно (фактически единственная причина, по которой вы можете это сделать)сделать это потому, что мы используем Python), но это единственный способ настроить argparse так, как вы хотите.
import argparse
class NArgsCustomUsageHelpFormatter(argparse.HelpFormatter):
def _format_args(self, action, default_metavar):
get_metavar = self._metavar_formatter(action, default_metavar)
if action.nargs == argparse.ONE_OR_MORE:
result = '%s' % get_metavar(1)
else:
result = argparse.HelpFormatter._format_args(self, action, default_metavar)
return result
parser = argparse.ArgumentParser(formatter_class=NArgsCustomUsageHelpFormatter)
parser.add_argument("FILES", nargs="+", type=str)
args = parser.parse_args()
Приведенный выше код просто меняет поведение по умолчанию, если действие будет отформатированонужен хотя бы один аргумент (nargs='+'
), иначе он не сделает ничего другого.
Надеюсь, это поможет вам!