2011-03-16 78 views
3

我創建了一個非常簡單的Python腳本:理解「在蟒蛇的tail -f」

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 

文件「some_file.txt」包含文本的幾行,這將被寫入到屏幕時,我運行腳本。如果我然後在echo "line" >> some_file.txt的文件中添加一行,該行將在1秒內打印到屏幕上。但是:如果我打開文件vim,在底部添加一行並保存,腳本停止運行。它既不會寫入vim中寫入的新行,也不會響應進一步的echo ...命令。

爲了您的信息,我目前在Ubuntu 10.10上使用python 2.6.6。

回答

8

(我假設你是在一些類Unix操作系統)。

保存在VIM將實際與磁盤上相同的名稱創建一個新文件。由腳本保存的文件句柄仍然指向舊的文件,該文件不再有目錄條目。如果腳本終止,則舊文件的引用計數器將降至0,並且該文件將被刪除。

+0

啊,這似乎是一個非常合理的解釋。謝謝! – 2011-03-16 14:17:37

+0

您可以在Vim中查看[:help crontab](http://vimdoc.sourceforge.net/htmldoc/options.html#crontab)瞭解有關該主題的一些信息。這是同樣的問題。 – Carpetsmoker 2011-03-16 14:18:42