मैं वर्तमान में लिनक्स सिस्टम पर पायथन में एक प्रोग्राम लिख रहा हूं। उद्देश्य एक लॉग फ़ाइल को पढ़ने और एक विशेष स्ट्रिंग खोजने पर एक बैश कमांड निष्पादित करना है। लॉग फ़ाइल को लगातार दूसरे प्रोग्राम द्वारा लिखा जा रहा है। मेरा सवाल है:अक्सर अद्यतन फ़ाइल से पढ़ना
यदि मैं खुली() विधि का उपयोग कर फ़ाइल खोलता हूं तो मेरी पायथन फ़ाइल ऑब्जेक्ट को अपडेट किया जाएगा क्योंकि वास्तविक फ़ाइल को अन्य प्रोग्राम द्वारा लिखा जाता है या क्या मुझे समय अंतराल पर फ़ाइल को फिर से खोलना होगा?
धन्यवाद
जिम
अद्यतन: जवाब अब तक के लिए धन्यवाद। मुझे शायद यह उल्लेख करना चाहिए था कि फ़ाइल जावा ईई ऐप द्वारा लिखी जा रही है, इसलिए जब डेटा को लिखा जाता है तो मेरा कोई नियंत्रण नहीं होता है। मुझे वर्तमान में एक प्रोग्राम मिला है जो हर 10 सेकंड में फ़ाइल को फिर से खोलता है और उस फ़ाइल में बाइट स्थिति से पढ़ने की कोशिश करता है जिसे वह पिछली बार पढ़ता है। फिलहाल यह वापस लौटने वाली स्ट्रिंग को प्रिंट करता है। मैं उम्मीद कर रहा था कि फ़ाइल को फिर से खोलने की आवश्यकता नहीं है लेकिन रीड कमांड को किसी भी तरह जावा ऐप द्वारा फ़ाइल में लिखे गए डेटा तक पहुंच होगी।
#!/usr/bin/python
import time
fileBytePos = 0
while True:
inFile = open('./server.log','r')
inFile.seek(fileBytePos)
data = inFile.read()
print data
fileBytePos = inFile.tell()
print fileBytePos
inFile.close()
time.sleep(10)
पायनोटीफाइफ़ और जेनरेटर पर युक्तियों के लिए धन्यवाद। मैं इन्हें एक अच्छे समाधान के लिए देख रहा हूं।
इस उत्तर – Quinma
अगर जवाब ओपी के कोड के मामले में एक कोड उदाहरण निहित मैं वोट दें जाएगा स्वीकार किया जाना चाहिए। –
@ Chiel92: डेविड बीज़ले की साइट –