Bloques de construcción de aplicaciones

La fuerza de la biblioteca estándar de Python es su tamaño. Incluye implementaciones de tantos aspectos de la estructura de un programa que los desarrolladores pueden concentrarse en lo que hace que su aplicación sea única, en lugar de tener que escribir todas las piezas básicas una y otra vez de nuevo. Este capítulo cubre algunos de los bloques de construcción que resuelven problemas comunes a tantas aplicaciones más frecuentemente reutilizados.

argparse es una interfaz para analizar y validar argumentos de la línea de comando. Soporta la conversión de argumentos de cadenas a enteros y otros tipos, ejecutando funciones de devolución de llamada cuando una opción es encontrada, estableciendo valores por defecto para las opciones no provistas por el usuario, y automáticamente produciendo instrucciones de uso para un programa. getopt implementa el modelo de procesamiento de argumentos de bajo nivel disponible para los programas C y las secuencias de comandos de shell. Tiene menos funciones que otras bibliotecas de análisis de opciones, pero su simplicidad y la familiaridad lo convierten en una opción popular.

Programas interactivos deberían usar readline para darle al usuario un símbolo del sistema. Incluye herramientas para administrar el historial, autocompletar partes de comandos y editar interactivamente con atajos de teclado emacs y vi. Para solicitar de forma segura al usuario para una contraseña u otro valor secreto, sin hacer eco del valor a la pantalla a medida que se escribe, usa getpass.

El módulo cmd incluye un marco de trabajo para programas de estilo shell interactivo basados en comandos. Proporciona el bucle principal y maneja la interacción con el usuario y la aplicación solo necesita implementar las devoluciones de llamadas de procesamiento para los comandos individuales.

shlex es un analizador para la sintaxis estilo shell, con líneas compuestas de simbólicos separados por espacios en blanco. Es inteligente sobre citas y secuencias de escape, así que el texto con espacios integrados se trata como un solo simbólico. shlex funciona bien como el tokenizer para lenguajes específicos del dominio como archivos de configuración o lenguajes de programación.

Es fácil administrar los archivos de configuración de aplicación con configparser. Puede guardar las preferencias del usuario entre ejecuciones del programa y las lee la próxima vez que se inicia una aplicación, o incluso servir como un formato simple de archivo de datos.

Las aplicaciones que se despliegan en el mundo real deben darles a sus usuarios información de depuración. Los mensajes de error simples y los rastreos son útiles, pero cuando es difícil reproducir un problema por completo, un registro de actividad completo puede apuntar directamente a la cadena de eventos que conduce a una falla. El módulo logging incluye una interfaz completa que gestiona archivos de registro, admite múltiples hilos e incluso se comunica con demonios de registro remoto para registro centralizado.

Uno de los patrones más comunes para los programas en entornos Unix es un filtro de línea por línea que lee los datos, los modifica y los vuelve a escribir de vuelta. Leer de archivos es bastante simple, pero puede que no haya una manera más fácil de crear una aplicación de filtro que mediante el uso del módulo fileinput. Su interfaz es un iterador de línea que produce cada línea de entrada, por lo que el cuerpo principal del programa es un simple bucle for. El módulo maneja el análisis de los argumentos de la línea de comando para que los nombres de archivo sean procesados, o volviendo a leer directamente desde la entrada estándar, así que las herramientas creadas en fileinput se pueden ejecutar directamente en un archivo o como parte de una fuente de información.

Usa atexit para programar las funciones que se ejecutarán cuando el intérprete esté cerrando un programa. Registrar devoluciones de llamadas de salida es útil para liberar recursos al cerrar sesiones en servicios remotos, cerrar archivos, etc.

El módulo sched implementa un programador para desencadenar eventos en tiempos establecidos en el futuro. La interfaz no dicta la definición de «tiempo», así que cualquier cosa, desde el verdadero tiempo del reloj hasta pasos del intérprete pueden ser usados.