Abrir un archivo en modo agregar al final puede parece raro, pero es bastante útil.
Uno de sus usos es para escribir un archivo de bitácora (o archivo de log), que nos permita ver los distintos eventos que se fueron sucediendo, y así encontrar la secuencia de pasos (no siempre evidente) que hace nuestro programa.
Esta es una forma muy habitual de buscar problemas o hacer un seguimiento de los sucesos. Para los administradores de sistemas es una herramienta esencial de trabajo.
En el Código 11.4 se muestra un módulo para manejo de logs, que se encarga de la apertura del archivo, del guardado de las líneas una por una y del cerrado final del archivo.
En este módulo se utiliza el módulo de Python datetime
para obtener la
fecha y hora actual que se guardará en los archivos. Es importante
notar que en el módulo mostrado no se abre o cierra un archivo en
particular, sino que las funciones están programadas de modo tal que
puedan ser utilizadas desde otro programa.
Se trata de un módulo genérico que podrá ser utilizado por diversos programas, que requieran la funcionalidad de registrar los posibles errores o eventos que se produzcan durante la ejecución.
Para utilizar este módulo, será necesario primero llamar a abrir_log
para abrir el archivo de log, luego llamar a guardar_log
por cada
mensaje que se quiera registrar, y finalmente llamar a cerrar_log
cuando se quiera concluir la registración de mensajes.
Por ejemplo, en el Código 11.5 se muestra un posible programa que utiliza el módulo de log incluido anteriormente.
# Código 11.4: log.py: Módulo para manipulación de archivos de log
#! /usr/bin/env python
# encoding: latin1
# El módulo datetime se utiliza para obtener la fecha y hora actual.
import datetime
def abrir_log(nombre_log):
""" Abre el archivo de log indicado. Devuelve el archivo abierto.
Pre: el nombre corresponde a un nombre de archivo válido.
Post: el archivo ha sido abierto posicionándose al final. """
archivo_log = open(nombre_log, "a")
guardar_log(archivo_log, "Iniciando registro de errores")
return archivo_log
def guardar_log(archivo_log, mensaje):
""" Guarda el mensaje en el archivo de log, con la hora actual.
Pre: el archivo de log ha sido abierto correctamente.
Post: el mensaje ha sido escrito al final del archivo. """
# Obtiene la hora actual en formato de texto
hora_actual = str(datetime.datetime.now())
# Guarda la hora actual y el mensaje de error en el archivo
archivo_log.write(hora_actual+" "+mensaje+"\\n")
def cerrar_log(archivo_log):
""" Cierra el archivo de log.
Pre: el archivo de log ha sido abierto correctamente.
Post: el archivo de log se ha cerrado. """
guardar_log(archivo_log, "Fin del registro de errores")
archivo_log.close()
# Código 11.5: usa_log.py: Módulo que utiliza el módulo de log
#!/usr/bin/env python
#encoding latin1
import log
# Constante que contiene el nombre del archivo de log a utilizar
ARCHIVO_LOG = "mi_log.txt"
def main():
# Al comenzar, abrir el log
archivo_log = log.abrir_log(ARCHIVO_LOG)
# ...
# Hacer cosas que pueden dar error
if error:
guardar_log(archivo_log, "ERROR: "+error)
# ...
# Finalmente cerrar el archivo
log.cerrar_log(archivo_log)
main()
Este código, que incluye el módulo log
mostrado anteriormente, muestra
una forma básica de utilizar un archivo de log. Al iniciarse el
programa se abre el archivo de log, de forma que queda registrada la
fecha y hora de inicio. Posteriormente se realizan tareas varias que
podrían provocar errores, y de haber algún error se lo guarda en el
archivo de log. Finalmente, al terminar el programa, se cierra el
archivo de log, quedando registrada la fecha y hora de finalización.
El archivo de log generado tendrá la forma:
2015-04-10 15:20:32.229556 Iniciando registro de errores 2015-04-10 15:20:50.721415 ERROR: no se pudo acceder al recurso 2015-04-10 15:21:58.625432 ERROR: formato de entrada inválido 2015-04-10 15:22:10.109376 Fin del registro de errores