Найти - Пользователи
Полная версия: Парсинг лога "живого" лога
Начало » Python для экспертов » Парсинг лога "живого" лога
1
agryn
Есть некая программа кототорая работая пишет в лог (конкретно это дебаг лог Firefox-а #export NSPR_LOG_MODULES=nsHttp:3).
Нужно также парсить этот лог в реальном времени - то есть python скрипт парсит лог, через некоторое время опять парсит (но нужно что б не сначала файла лога, а с того места где добавилась новая информация).
Есть также вариант что ту часть лога которую скрипт обработал можно удалить но не знаю как это сделать что б при совместном доступе все работало стабильно (мне так бы было даже лучше так как размер лога не разбухал бы).
Подскажите как лучше реализовать?
JOHN_16
agryn
ну по первому пункту все просто - чиаешь файл лога, запоминаешь размер. В следующий раз смотришь - изменился ли размер, если да то перемешаешься на заранее сохраненную позицию и читаешь кусок лога и тд.
по второму пункту: если плагин держит файл открытым на запись, то у него свой “курсор” внутри файла куда ведется запись. И от того что кто то влезет и изменит содержимое файла этот курсор в последслвии неизветсно где окажется , что вероятно может привести к ошибке или к нежелаемому результату.
funnyman
можно использовать генераторы, пример из книги “Справочник по Python”:
import time
def tail(f):
    f.seek(0,2)
    while True:
        line = f.readline()
        if not line: 
            time.sleep(0.1)
            continue
        yield line

Пердаем в функцию файловый дескриптор, переходим в конец файла, читаем строку, если строки нет, то приостанавливаемся на некоторое время, тут может выставить задержку примерно равную добавлению новых данных в ваш лог файл. Далее цикл повторяется, если новые данные есть то объект функции генератора будет возвращать например в цикле for каждый раз новую строку.
Например:
f = open('file.log', 'r')
logStr = tail(f)
for line in logStr:
    #парсим то новую строку из лог файла, которая сейчас находится в line
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB