2011-03-16 8 views
3

J'ai créé un script python très simple:Comprendre la « tail -f en python »

def read_then_follow(file): 
    for line in file: 
     yield line 
    while True: 
     line = file.readline() 
     if not line: 
      time.sleep(1.0) 
      continue 
     yield line 

for line in read_then_follow("some_file.txt"): print line 

Le fichier « some_file.txt » contient quelques lignes de texte, qui sera écrit à écran lorsque je lance le script. Si j'ajoute ensuite une ligne au fichier avec echo "line" >> some_file.txt, la ligne sera imprimée à l'écran dans la seconde. Mais: si j'ouvre le fichier en vim, ajoutez une ligne en bas et enregistrez, le script s'arrête de fonctionner. Il n'écrit pas la nouvelle ligne écrite en vim à l'écran ni en réponse à d'autres commandes echo .... Pour information, j'utilise actuellement python 2.6.6 sous Ubuntu 10.10.

Répondre

8

(je suppose que vous êtes sur un système d'exploitation Unix.)

économie dans vim créera en fait un nouveau fichier avec le même nom sur le disque. Le descripteur de fichier conservé par votre script pointe toujours vers le fichier ancien, qui ne contient plus d'entrée de répertoire. Si votre script se termine, le compteur de référence de l'ancien fichier tombera à 0 et le fichier sera supprimé.

+0

Ah, cela semble être une explication très raisonnable. Je vous remercie! –

+0

Vous pouvez consulter [: help crontab] (http://vimdoc.sourceforge.net/htmldoc/options.html#crontab) dans Vim pour obtenir des informations sur le sujet. C'est le même problème. – Carpetsmoker

Questions connexes