Değişiklikleri izlemek istediğim başka bir işlem tarafından yazılan bir günlük dosyam var. Her değişiklik olduğunda, üzerinde bazı işlemler yapmak için yeni verileri okumak istiyorum.
Bunu yapmanın en iyi yolu nedir? PyWin32 kütüphanesinden bir çeşit kanca olmasını umuyordum. Win32file.FindNextChangeNotification` fonksiyonunu buldum ancak belirli bir dosyayı izlemesini nasıl isteyeceğim konusunda hiçbir fikrim yok.
Eğer böyle bir şey yapmış olan varsa, nasıl olduğunu duymak beni gerçekten çok mutlu eder...
[Düzenle] Yoklama gerektirmeyen bir çözümün peşinde olduğumu belirtmeliydim.
[Düzenle] Lanet olsun! Görünüşe göre bu eşlenmiş bir ağ sürücüsü üzerinde çalışmıyor. Windows'un dosyadaki güncellemeleri yerel bir diskte olduğu gibi duymadığını tahmin ediyorum.
Benzer bir soruya]2 verdiğim cevabımı kontrol edin. Aynı döngüyü Python'da deneyebilirsiniz. Bu sayfa öneriyor:
import time
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
print line, # already has newline
Ayrıca tail() a file with Python sorusuna da bakın.
Windows'a özel bir fonksiyon bilmiyorum. Her saniye/dakika/saat (ne kadar hızlı ihtiyacınız olduğuna bağlı) dosyanın MD5 hash'ini almayı ve son hash ile karşılaştırmayı deneyebilirsiniz. Farklı olduğunda, dosyanın değiştirildiğini bilirsiniz ve en yeni satırları okursunuz.
Ben olsam şöyle bir şey denerdim.
try:
f = open(filePath)
except IOError:
print "No such file: %s" % filePath
raw_input("Press Enter to close window")
try:
lines = f.readlines()
while True:
line = f.readline()
try:
if not line:
time.sleep(1)
else:
functionThatAnalisesTheLine(line)
except Exception, e:
# handle the exception somehow (for example, log the trace) and raise the same exception again
raw_input("Press Enter to close window")
raise e
finally:
f.close()
Döngü, dosyanın son okunmasından bu yana yeni satır(lar) olup olmadığını kontrol eder - eğer varsa, okunur ve functionThatAnalisesTheLine
fonksiyonuna aktarılır. Değilse, kod 1 saniye bekler ve işlemi yeniden dener.