/ / python "tail -f" come readline della funzione bloccato su EOF - python, readline, eof, tail

python "tail -f" come readline della funzione bloccato su EOF - python, readline, eof, tail

Ho uno snippet di codice tail -f like che ho trovatoalcuni erano sul web. Purtroppo, a un certo punto ho scoperto che sembra essere bloccato su EOF anche quando l'EOF non è più lì, perché qualcosa è stato aggiunto al file. Restituirà ancora 0. Se cerco indietro, per esempio 10 byte, leggerà fino alla posizione EOF precedente e questo è tutto.Posso sistemarlo chiudendo e riaprendo il file, ma non capisco il comportamento . Qualcuno può aiutare?

Il codice:

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

risposte:

0 per risposta № 1

Suppongo che tu sia su una macchina Linux o simile. Il numero di inode (usare ls -i filename) cambia quando il file è stato modificato? Se sì - in sostanza il tuo vecchio file è stato cancellato, ma il suo contenuto è ancora disponibile attraverso il file gestito dal tuo programma (cioè punta ancora al vecchio inode). In tal caso, la riapertura è l'unica possibilità.

Per maggiori dettagli vedi Cosa succede a un gestore di file aperto su Linux se il file puntato viene spostato, cancella