2015-08-31 93 views
0
import os 
import sys 
from time import sleep 

soft = 'link.lnk' 
fd_soft = open(soft, 'a'); 
i = 0; 
while 1: 
    try: 
     line = 'the count is %d' %(i) 
     print line 
     fd_soft.write(line); 
     i += 1; 
     sleep(1); 
     fd_soft.flush() 
    except KeyboardInterrupt: 
     print "interrupt ctrl c" 
     fd_soft.close() 
     sys.exit(0) 

link.lnk是一個到old.txt文件的軟鏈接。 該腳本將打開軟鏈接並每秒向其寫入一個數字。
在運行時我改變link.lnk指向一個新的文件,Python無法識別軟鏈接變更

ln -sf new.txt link.lnk 

,因爲我想寫信給new.txt,但是過程仍然保持寫舊文件。

回答

1

你還在使用您在改變符號鏈接之前打開舊的文件句柄。如果您希望在新的符號鏈接中反映新的寫入,則需要在每次寫入之前重新打開文件句柄,並在每次寫入後關閉它。

+0

謝謝,我想這和它的作品,但不會有是性能命中,我寫一個程序,也許可以記錄每分鐘 –

+1

100線那麼在這種情況下,你應該建立在你的代碼中的信號處理程序來監聽SIGHUP信號,並關閉文件句柄,可能等待一秒鐘,然後打開一個新的文件句柄,並繼續在其日誌記錄,這樣就可以抱到老的文件句柄,只有當您收到開放的SIGHUP信號insetad放棄和關閉每寫。無論什麼改變你的符號鏈接都應該在它改變符號鏈接之前發送一個SIGHUP到你的python進程。這是logrotate的基本思想。在蟒蛇在這裏的信號處理更多信息:https://pymotw.com/2/signal/ –

+0

好主意,但我不能讓到日誌編寫應用程序的任何變化,生病可能使用類似日誌輪播 –