2017-04-14 1 views
0

私はウェブ上でsomehwereを見つけたtail -fのようなコードスニペットを持っています。不幸にも、ある時点で、ファイルに何かが追加されたためにEOFが存在しなくても、EOFに固執しているように見えました。それでも0が返されます。例えば10バイトのように私が戻ってきたら、前のEOF位置まで読み込みます。それだけです。ファイルを閉じて再オープンすることで修正できますが、その動作はわかりません。助けてもらえますか?python "tail -f"関数のreadlineがEOFに詰まっていたようです

コード:

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 
+0

ここで 'tell()'とは何ですか? – marmeladze

+0

ファイル内の現在の位置を取得します。不完全な行が読み出されたかどうかを調べるために使用されます。そうであれば、元に戻してユーザーに通知します。 –

答えて

0

私はあなたがLinuxマシンまたは同様にしていると仮定しています。ファイルが変更されたときにiノード番号(ls -i filenameを使用)が変更されましたか?はいの場合 - 本質的にあなたの古いファイルは削除されましたが、あなたのプログラムが使用しているファイルハンドル(つまり古いinodeを指しています)を介して内容が利用可能です。そのような場合には再開は唯一の可能性です。

詳細はWhat happens to an open file handler on Linux if the pointed file gets moved, delete

+0

ありがとう!それが理由だった。それは悲しいですが、それはLinux上で(またはext4の障害ですか?)再オープンは唯一の可能性です。不足している機能のようです。 –

関連する問題