/ / python „tail -f” jak funkcja readline zablokowana na EOF - python, readline, eof, tail

Python "tail -f" jak funkcja readline zatrzymana na EOF - python, readline, eof, tail

Mam ogon -f jak fragment kodu, który znalazłemktoś w sieci. Niestety, dowiedziałem się w pewnym momencie, że wydaje się, że utknął na EOF, nawet jeśli nie ma już EOF, ponieważ coś zostało dołączone do pliku. Nadal zwróci 0. Jeśli szukam z powrotem, na przykład 10 bajtów, odczytuje do poprzedniej pozycji EOF i to wszystko. Mogę to naprawić, zamykając i ponownie otwierając plik, ale nie rozumiem zachowania . Czy ktoś może pomóc?

Kod:

def tail_f_nonblock(f):
while True:
where = f.tell()
line = f.readline()
if not line:
diff = f.tell()-where
f.seek(where)
# If there was some output, give -1
if diff!=0: return -1
else: return 0
else:
return line

Odpowiedzi:

0 dla odpowiedzi № 1

Zakładam, że jesteś na maszynie linuksowej lub podobnej. Czy numer i-węzła (użyj ls -i nazwa_pliku) zmienia się, gdy plik został zmodyfikowany? Jeśli tak - zasadniczo twój stary plik został usunięty, ale jego zawartość jest nadal dostępna za pośrednictwem uchwytu pliku używanego przez program (tj. Nadal wskazuje na stary i-węzeł).

Aby uzyskać więcej informacji, zobacz Co stanie się z otwartym programem obsługi plików w systemie Linux, jeśli wskazany plik zostanie przeniesiony, usuń