Если вы являетесь пользователем Linux, вы, возможно, знакомы с tail -f filename.txt
.
Вместо того, чтобы просто отображать последние несколько строк и выходить из него, tail отображает строки, а затем отслеживает файл.Когда новые строки добавляются в файл другим процессом, tail обновляет отображение.
Если ваш сценарий использования заключается в чтении новых строк, добавленных в файл, то это реализация tail -f
.
file = open(filename,'r')
#Find the size of the file and move to the end
st_results = os.stat(filename)
st_size = st_results[6]
file.seek(st_size)
import time
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(0.05)
file.seek(where)
else:
print line, # already has newline
Этот метод непрерывно проверяет каждые 0,05 с и печатает добавленные новые строки.
Альтернативно здесь tail -f
в качестве подпроцесса:
from subprocess import Popen, PIPE, STDOUT
p = Popen(["tail", "-f", "/the/file"], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
for line in p.stdout:
print(line)
Если файлдобавляется подпроцессом, это еще проще, просто передайте стандартный вывод вашей функции.