Python-скрипт для извлечения новых данных из файла с момента его последнего чтения - PullRequest
2 голосов
/ 13 июля 2011

Я работаю над сценарием Python, чтобы сделать следующее: -

Я хотел бы читать файл журнала каждые десять минут, и при каждом чтении я хотел бы извлечь любые добавленные данные в файл с момента его последнего чтения (желательно без необходимости каждый раз читать весь файл журнала). Пример: -

В 09:00 я читаю файл журнала и содержимое: -

1. 2011-07-04 11:15:04,507 Processing request 17897931 from status 7 to 13
2. 2011-07-04 11:15:04,508 Processing request 17897931 from status 13 to 17
3. 2011-07-04 11:15:04,508 Processing request d0fcb681 from status 7 to 13
4. 2011-07-04 11:15:04,509 Processing request d0fcb681 from status 13 to 17
5. 2011-07-04 11:15:04,509 Processing request 178819a1 from status 7 to 13

В 09:10 я снова прочитал файл журнала и теперь его содержимое: -

1. 2011-07-04 11:15:04,507 Processing request 17897931 from status 7 to 13
2. 2011-07-04 11:15:04,508 Processing request 17897931 from status 13 to 17
3. 2011-07-04 11:15:04,508 Processing request d0fcb681 from status 7 to 13
4. 2011-07-04 11:15:04,509 Processing request d0fcb681 from status 13 to 17
5. 2011-07-04 11:15:04,509 Processing request 178819a1 from status 7 to 13
6. 2011-07-04 11:15:04,510 Processing request 178819a1 from status 13 to 17
7. 2011-07-04 11:15:04,510 Processing request 17161df1 from status 7 to 13
8. 2011-07-04 11:15:04,511 Processing request 17161df1 from status 13 to 17
9. 2011-07-04 11:15:04,511 Processing request 182013e1 from status 7 to 9

Как мой скрипт может извлечь новые строки (строки с 6 по 9)?

У меня есть сценарий оболочки, который уже выполняет эту задачу, используя inode файла. Я ищу решение на основе Python.

Мой план - выполнить скрипт через crontab.

Ребята, вы понимаете, как я могу это сделать?

1 Ответ

2 голосов
/ 13 июля 2011
  1. проверить размер файла
  2. дождитесь изменения размера
  3. открыть файл, искать предыдущий размер
  4. прочитать

Пример:

import os, time
size = os.stat(file).st_size
time.sleep(600)
fh = open(file)
fh.seek(size)
newData = fh.read()

Этот пример будет время от времени читать частичную строку, если другой процесс одновременно записывает в журнал. Я оставлю это решение в качестве упражнения:)

...