De acuerdo con PEP 257 la secuencia de comandos de la secuencia de comandos de línea de comandos debe ser su mensaje de uso.¿Cómo cumplir con las cadenas de documentos PEP 257 cuando se usa el módulo optparse de Python?
La cadena de documentación de un script (un programa autónomo) debe ser utilizable como su mensaje de "uso", impresa cuando el guión es invocado con argumentos incorrectos o faltantes (o tal vez con un " -h "opción, para" ayuda "). Tal docstring debe documentar la función del script y la sintaxis de la línea de comandos, las variables de entorno y los archivos. mensajes de uso pueden ser bastante elaborado (varias pantallas completo) y deben ser suficiente para un nuevo usuario al utilizar el comando correctamente, así como una referencia rápida completa a todas las opciones y argumentos para el usuario sofisticado .
Así que mi cadena de documentación sería algo como esto:
<tool name> <copyright info> Usage: <prog name> [options] [args] some text explaining the usage... Options: -h, --help show this help message and exit ...
Ahora quiero usar el módulo optparse. optparse genera las secciones "Opciones" y un "uso" que explica la sintaxis de línea de comandos:
from optparse import OptionParser
if __name__ == "__main__":
parser = OptionParser()
(options, args) = parser.parse_args()
Así que llamar a la secuencia de comandos con los "-h" impresiones de la bandera:
Usage: script.py [options] Options: -h, --help show this help message and exit
Esto puede ser modificado según siguiente:
parser = OptionParser(usage="Usage: %prog [options] [args]",
description="some text explaining the usage...")
que resulta en
Usage: script.py [options] [args] some text explaining the usage... Options: -h, --help show this help message and exit
Pero, ¿cómo puedo usar el docstring aquí? Pasar el docstring ya que el mensaje de uso tiene dos problemas.
- optparse anexa "Modo de empleo" a la cadena de documentación si no se inicia con el "Modo de empleo"
- El marcador de posición '% PROG' debe ser utilizado en la cadena de documentación
Resultado
De acuerdo con las respuestas, parece que no hay forma de reutilizar la docstring prevista por el módulo optparse. Por lo tanto, la opción restante es analizar manualmente la cadena de documentación y construir OptionParser. (Así que aceptaré la respuesta de S.Loot)
La parte "Uso:" es introducida por el IndentedHelpFormatter que puede ser reemplazado por el parámetro del formateador en OptionParser .__ init __().
me gusta la segunda solución. No muy limpio, pero inteligente y pragmático. –
Como las líneas en blanco entre los párrafos son el estándar RST, esto ahorra la ejecución de un análisis completo de Docutils en __doc__ y obtiene lo que, por definición, es el resultado esperado. –
Esa podría ser una opción para la descripción. Pero todavía no puedo reutilizar la parte 'uso' y optparse obliga al mensaje a comenzar con "Uso:". – wierob