Как считывать информацию с log файла? На Python
Есть лог файл DropsSummoner.log, он периодический обновляется. Мне нужно чтобы после каждого обновления этого файла, выводилось на экран последняя строчка этого файла (я делаю уведомления в телеграм, в итоге эта строчка будет отправлена в телеграм, но эту часть я и сам могу сделать, я не могу придумать как считывать последнюю строчку после каждого обновления файла).
Ответы (2 шт):
Автор решения: Сергей Ш
→ Ссылка
txt = '11\n' \
'12\n' \
'13\n'
print(txt.splitlines()[-1])
вывод
13
Автор решения: Стас
→ Ссылка
В этой задаче вам поможет уже отмеченный watchdog.
Пример кода (ловит изменения в файле и выводит последнюю строку измененного файла на консоль):
import time
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
class FileChangeEventHandler(PatternMatchingEventHandler):
def __init__(self, patterns=None, ignore_patterns=None, case_sensitive=False):
super().__init__(
patterns=patterns,
ignore_patterns=ignore_patterns,
ignore_directories=True,
case_sensitive=case_sensitive
) #принудительно устанавливаем ignore_directories на True,
#так как нам нужны только изменения в файлах
def on_modified(self, event):
with open(event.src_path) as modifiedFile:
for line in modifiedFile: pass
print(line)
targetDir = "."
patterns = ("test.txt",) #укажите здесь шаблон, соответствующий отслеживаему файлу (файлам)
observer = Observer()
observer.schedule(
event_handler = FileChangeEventHandler(patterns=patterns),
path = targetDir,
recursive = False
)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("Stopping")
finally:
observer.stop()
observer.join()
- По поводу шаблонов для файлов можете почитать тут.
- Бесконечный цикл нужен, чтобы программа не завершилась сразу после установки watchdog. Его можно заменить какой либо полезной нагрузкой (например, bot_polling())
- Observer работает в отдельном потоке. То есть основной поток можно занять другими операциями, не боясь, что обработка событий watchdog зависнет