argparse ayuda sin duplicar ALLCAPS

Me gustaría mostrar la ayuda de argparse para mis opciones de la misma manera que están predeterminados -h , --help y -v , --version , sin el texto ALLCAPS después de la opción, o al menos sin los CAPS duplicados.

 import argparse p = argparse.ArgumentParser("a foo bar dustup") p.add_argument('-i', '--ini', help="use alternate ini file") print '\n', p.parse_args() 

Esto es lo que actualmente obtengo con python foobar.py -h :

 usage: a foo bar dustup [-h] [-i INI] optional arguments: -h, --help show this help message and exit -i INI, --ini INI use alternate ini 

Y esto es lo que quiero:

 usage: a foo bar dustup [-h] [-i INI] optional arguments: -h, --help show this help message and exit -i, --ini INI use alternate ini 

Esto sería aceptable también:

  -i, --ini use alternate ini 

Estoy usando python 2.7.

Related of "argparse ayuda sin duplicar ALLCAPS"

Puede personalizar el usage y asignar metavar a una cadena vacía:

 import argparse p = argparse.ArgumentParser("a foo bar dustup", usage='%(prog)s [-h] [-i INI]') p.add_argument('-i', '--ini', help="use alternate ini file", metavar='') p.print_help() 

Salida

 uso: una eliminación de barras de foo [-h] [-i INI]

 argumentos opcionales:
   -h, --help muestra este mensaje de ayuda y sale
   -i, --ini usa un archivo ini alternativo

Bueno, por lo que puedo decir tiene dos opciones,

 import argparse p = argparse.ArgumentParser(description="a foo bar dustup") p.add_argument('-i', '--ini', metavar='', help="use alternate ini file") print '\n', p.parse_args() 

o puede escribir una clase de formateador personalizado, me doy cuenta de que la primera opción puede no ser una solución perfecta, ya que se deshace de los CAPS en la línea de uso. Si es tan importante aquí es la fuente de argparse, por lo que puedo decir que las clases de formateador predeterminadas no harán exactamente lo que quieres.

Editar:

Bueno, seguí adelante y construí tu propia clase de formateador, de la misma manera que las otras … no estoy seguro de recomendarte que uses esto en el código de producción, ya que no habrá ninguna documentación oficial de Python para ello = P

 import argparse from argparse import HelpFormatter class MyFormatter(HelpFormatter): """ for matt wilkie on SO """ def _format_action_invocation(self, action): if not action.option_strings: default = self._get_default_metavar_for_positional(action) metavar, = self._metavar_formatter(action, default)(1) return metavar else: parts = [] # if the Optional doesn't take a value, format is: # -s, --long if action.nargs == 0: parts.extend(action.option_strings) # 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(option_string) return '%s %s' % (', '.join(parts), args_string) return ', '.join(parts) def _get_default_metavar_for_optional(self, action): return action.dest.upper() p = argparse.ArgumentParser("a foo bar dustup", formatter_class=MyFormatter) p.add_argument('-i', '--ini', help="use alternate ini file") p.print_help()