Использование pyinotify для "живого" обновления отображаемого файла

G'day,

У меня есть Raspberry Pi, который будет использоваться для отображения CSV-файла журнала транзакций на дисплее, подключенном по HDMI. Мне бы хотелось, чтобы дисплей работал как "табло", так что все, что видит пользователь, - это файл журнала CSV (например, доска объявлений аэропорта / рейса).

Мне сказали, что pyinotify может отслеживать файл CSV журнала, а затем обновлять файл, не закрывая и не открывая его снова? Я прочитал документацию и искал эту функциональность в Интернете, но до сих пор не нашел ничего. У меня нет примера кода, чтобы продемонстрировать то, что я пробовал (пока!), Так как я хотел прежде всего выяснить, возможна ли эта функциональность с помощью pyinotify, или я должен смотреть на что-то еще.

Я использую Python 3.3.

Любое руководство здесь было бы удивительным!

Спасибо!

1 ответ

Хорошо, я не знаю, поможет ли это, но вот как вы можете это сделать:

допустим, у нас есть файл:

echo "line 1" >> testfile.txt 

Чем написать скрипт (обязательно укажите этот файл):

import os, pyinotify

PATH = os.path.join(os.path.expanduser('~/'), 'testfile.txt')

class EventHandler(pyinotify.ProcessEvent):
    def __init__(self, *args, **kwargs):
        super(EventHandler, self).__init__(*args, **kwargs)
        self.file = open(PATH)
        self.position = 0
        self.print_lines()

    def process_IN_MODIFY(self, event):
        self.print_lines()

    def print_lines(self):
        new_lines = self.file.read()
        last_n = new_lines.rfind('\n')
        if last_n >= 0:
            self.position += last_n + 1
            print new_lines[:last_n]
        else:
            print 'no line'
        self.file.seek(self.position)

wm = pyinotify.WatchManager()
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wm.add_watch(PATH, pyinotify.IN_MODIFY, rec=True)
notifier.loop()

запустите файл:

python notify.py

ты увидишь

line 1

чем добавить еще одну строку из другого терминала в файл (убедитесь, что скрипт все еще работает)

echo "line 2" >> testfile.txt

и вы увидите это на выходе скрипта

PS кредит за этот код достается Nicolas Cortot

Другие вопросы по тегам