Использование 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
и вы увидите это на выходе скрипта