Хвост файла в python - PullRequest
       3

Хвост файла в python

0 голосов
/ 10 марта 2020

Как я могу "следить" за файлом, похожим на команду tail из python? Например, я думаю, что сработало бы следующее:

def tail(filepath):
    source = open(filepath)
    source.seek(0,2)
    while True:
        chunk = source.readline()
        yield chunk
    source.close()

Тем не менее, кажется, что он не улавливает «новые строки» после того, как кажется, что эти строки добавлены и сохранены в рассматриваемый файл. Как правильно выбрать файл в python?

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Лучшее, что я мог выяснить:

with open('e:\\test.txt','r') as f:
    initial_length = len(f.readlines())
    while True:
        f.seek(0)
        lines = f.readlines()
        curr_length = len(lines)
        if curr_length > initial_length:
            for line in lines[initial_length:curr_length]:
                print(line)
            initial_length = curr_length

Я бы порекомендовал открыть файл внутри оператора "with", чтобы файл закрывался правильно (если вы этого не сделаете, нажатие ctrl + C может привести к оставьте файл открытым).
И вам нужно использовать «поиск», чтобы вернуться к началу после каждого чтения строки.

0 голосов
/ 10 марта 2020

Вы можете использовать что-то вроде этого:

import os
from time import sleep

filename = 'file.test' # filename to 'follow'
with open(filename) as file:
    st_size = os.stat(filename)[6]
    file.seek(st_size) # move to the eof
    while True:
        where = file.tell() # save eof position
        line = file.readline()
        if not line: # if there is no new line
            sleep(1)
            file.seek(where) # move back
        else: # if there is a new line
            print(line.replace('\n','')) # print new line
...