Estoy tratando de encontrar una buena manera de leer un archivo de registro en tiempo real usando Python. Me gustaría procesar las líneas de un archivo de registro de una en una a medida que se escribe. De alguna manera tengo que seguir tratando de leer el archivo hasta que se cree y luego seguir procesando líneas hasta que termine el proceso. ¿Hay una forma apropiada de hacer esto? Gracias.Leer de un archivo de registro como está siendo escrito usando python
Respuesta
Usted podría intentar con algo como esto:
import time
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
print line, # already has newline
Ejemplo fue extraído de here.
Esto parece estar funcionando pero no me permitirá crear objetos o escribir en una base de datos al mismo tiempo en mi aplicación django. No veo una razón obvia para esto; ¿hay una solución simple? – Anon
No lo sé. Deberías publicar un código en una pregunta separada para obtener respuestas a esta, supongo. No veo ninguna razón para no actualizar la base de datos si coloca ese código dentro de este ... –
Tengo esto para trabajar, pero tuve que meterme demasiado con la cadena antes de que pudiera escribir en mi base de datos. Gracias. – Anon
Tal vez usted podría hacer una llamada al sistema de
tail -f
usando os.system()
Tome un vistazo a this PDF partir de la página 38, ~ diapositivas I-77 y encontrará todos la información que necesitas Por supuesto, el resto de las diapositivas son increíbles, también, pero los que tratan específicamente de su problema:
import time
def follow(thefile):
thefile.seek(0,2) # Go to the end of the file
while True:
line = thefile.readline()
if not line:
time.sleep(0.1) # Sleep briefly
continue
yield line
Merece la pena señalar que esto omitirá cualquier contenido que ya esté en el archivo de registro, solo imprimirá las entradas "nuevas" creadas después de que se haya creado este iterador. También ese PDF realmente es una mina de oro;) – blented
Como esto es Python y el registro está etiquetado, hay otra posibilidad de hacerlo.
Supongo que esto se basa en un registrador de Python, logging.Handler based.
justo Usted puede crear una clase que obtiene el (llamado) instancia registrador y sobrescribir la función emit
para ponerlo en una interfaz gráfica de usuario (si necesita consola sólo tiene que añadir un controlador de consola al controlador de archivo)
Ejemplo:
import logging
class log_viewer(logging.Handler):
""" Class to redistribute python logging data """
# have a class member to store the existing logger
logger_instance = logging.getLogger("SomeNameOfYourExistingLogger")
def __init__(self, *args, **kwargs):
# Initialize the Handler
logging.Handler.__init__(self, *args)
# optional take format
# setFormatter function is derived from logging.Handler
for key, value in kwargs.items():
if "{}".format(key) == "format":
self.setFormatter(value)
# make the logger send data to this class
self.logger_instance.addHandler(self)
def emit(self, record):
""" Overload of logging.Handler method """
record = self.format(record)
# ---------------------------------------
# Now you can send it to a GUI or similar
# "Do work" starts here.
# ---------------------------------------
# just as an example what e.g. a console
# handler would do:
print(record)
actualmente estoy usando un código similar a añadir un TkinterTreectrl.Multilistbox para la visualización de salida de registrador en tiempo de ejecución.
Off-side: El registrador solo obtiene datos tan pronto como se inicializa, por lo que si desea tener todos sus datos disponibles, debe inicializarlos desde el principio. (Sé que esto es lo que se espera, pero creo que vale la pena mencionarlo).
- 1. Leyendo datos de un Archivo mientras está siendo escrito en
- 2. Leer datos de un archivo de registro como una aplicación por separado está escribiendo en él
- 3. archivo está siendo utilizado por otro proceso
- 4. Comprobando si el archivo está completamente escrito
- 5. Registro de Python usando un decorador
- 6. Archivo de Python Leer + Escribir
- 7. Mirar/leer un archivo de registro en crecimiento
- 8. Usando Python, ¿cómo puedo leer/escribir datos en la memoria como lo haría con un archivo?
- 9. ¿Cómo leer un CD como un archivo?
- 10. Python: borre un archivo de registro
- 11. python logging cómo crear el archivo de registro como html
- 12. Leer el objeto del archivo como una cadena en python
- 13. Registro de Java: ¿dónde está mi archivo de registro?
- 14. ¿Hay un analizador GEDCOM escrito en Python?
- 15. Python xlrd leer como cadena
- 16. cómo leer un archivo pdf usando lisp
- 17. Leer archivo enorme en Python
- 18. Cómo leer un archivo CSV usando iOS
- 19. Java: abrir y leer un archivo sin bloquearlo
- 20. Archivo de configuración de registro de Python
- 21. ¿Cómo leer el archivo de registro de innodb?
- 22. Lectura (con Filesystem.FileGet) Archivo de registro VB6 (escrito con Put) con C#
- 23. usando dictConfig en el registro de python, necesita crear un registrador con un archivo diferente al definido en dict.
- 24. Leer un archivo zip y escribirlo en otro archivo python
- 25. onCreateContextMenu no está siendo llamado
- 26. Python lib para leer un archivo swf de formato Flash
- 27. Logback FileAppender - archivo de registro está vacío?
- 28. El proceso no tiene acceso al archivo porque está siendo utilizado por otro proceso
- 29. Crear un archivo RDF usando un archivo txt como entrada
- 30. usando java.util.Scanner para leer un byte de archivo por byte
Este también es bueno ... Creo que se ajusta bien a sus criterios y proporciona una clase que podría ampliarse fácilmente. [http://code.activestate.com/recipes/577968-log-watcher-tail-f-log/](http://code.activestate.com/recipes/577968-log-watcher-tail-f-log /) – mogga