2010-05-14 17 views
7

मैंने एक पायथन स्क्रिप्ट बनाई है जो परिवर्तनों (जैसे tail -f) के लिए लॉगफाइल पर नज़र रखता है और इसे कंसोल पर प्रदर्शित करता है। मैं एक वेबब्रोसर में पायथन स्क्रिप्ट के आउटपुट तक पहुंच बनाना चाहता हूं। मुझे इसे बनाने की क्या ज़रूरत होगी? मैं Django और jQuery का उपयोग करने के बारे में सोच रहा था। किसी भी सुझाव या उदाहरणों की बहुत सराहना की जाती है।पूंछ-एफ वेबब्रोसर में

उत्तर

8

पहले एक पायथन स्क्रिप्ट बनाएं जो परिवर्तन के लिए लॉग फ़ाइल पर नज़र रखता है। यदि आपको केवल डीबगिंग के लिए इसकी आवश्यकता है - परीक्षण उद्देश्यों, तो यह Django या किसी अन्य वेब ढांचे का उपयोग करने के लिए एक ओवरकिल है। सॉकेट का उपयोग करके एचटीपी वेब सर्वर कार्यक्षमता को कार्यान्वित करना बहुत आसान है। जब भी एक एचटीपी अनुरोध प्राप्त हो रहा है, तो विभिन्न अनुरोधों से केवल अंतर प्रदान करें। इसे प्राप्त करने के लिए आपको स्मृति में प्रत्येक अनुरोध की स्थिति (उदा। फ़ाइल में अंतिम पंक्ति की संख्या) की स्थिति में स्टोर करने की आवश्यकता है।

jQuery भाग वास्तव में काफी आसान है। SetTimeout फ़ंक्शन के साथ एक टाइमर सेट करें। ऐसा कुछ ऐसा करेगा:

function doUpdate() { 
    $.ajax({type: "GET", url : tailServiceUrl, 
      success: function (data) { 
      if (data.length > 4) 
      { 
       // Data are assumed to be in HTML format 
       // Return something like <p/> in case of no updates 
       $("#logOutputDiv").append(data); 
      } 
      setTimeout("doUpdate()", 2000); 
      }}); 
} 

setTimeout("doUpdate()", 2000); 

आप सर्वर के साथ किसी समस्या की रिपोर्ट करने के लिए त्रुटि और टाइमआउट के लिए कॉलबैक भी बना सकते हैं।

+0

स्पष्टीकरण की बात, setTimeout() फ़ंक्शन केवल 2000 मिलीसेकंड के बाद doUpdate() को कॉल करेगा। यह एक लूप नहीं बनाएगा। यदि आप इसे लूप करना चाहते हैं, तो आपको setTimeout कॉल को doUpdate() फ़ंक्शन में ले जाना होगा, अधिकतर अंत में, या इसे setInterval() में बदल दें। यहां जेएस फ़ंक्शन दोनों की एक अच्छी छोटी तुलना है: http://javascript.about.com/library/blstvsi.htm – gurun8

+0

आप सही हैं, सेटटाइमआउट को DoUpdate में स्थानांतरित किया जाना चाहिए। – kgiannakakis

2

मेरे पास कोई पायथन या Django अनुभव नहीं है लेकिन मुझे लगता है कि आप पाइथन में tail जैसे system call बना सकते हैं और विवरण रिले कर सकते हैं।

वहां से, मैं एक jQuery .ajax() को अपने पाइथन स्क्रिप्ट पर जावास्क्रिप्ट setInterval() लूप के साथ कॉल करता हूं और परिणामों को वेब पेज पर एक div पर आउटपुट करता हूं। कुल मिलाकर एक बहुत ही सरल समाधान।

इस उदाहरण में, तुम सच में एक खुला tail -f सिस्टम कॉल उपयोग करने के लिए क्योंकि जे एस setInterval() विधि की प्रकृति, अजगर स्क्रिप्ट से अधिक बुलाया जाएगा और फिर जब तक जे एस clearInterval() विधि कहा जाता है की जरूरत नहीं होगी। आप अपने स्क्रिप्ट विवरण को पाइथन या जेएस में जोड़ देंगे जहां आप काम करना चाहते हैं। मैं पाइथन का सुझाव दूंगा क्योंकि आपके पास अपनी उंगलियों पर अधिक मजबूत विशेषताएं होंगी और आप AJAX कॉल के माध्यम से कम डेटा भेजेंगे। सैद्धांतिक रूप से, शायद सामने वाले अंत में jQuery कोड में बहुत अधिक तर्क की आवश्यकता नहीं होनी चाहिए। बस डेटा प्रदर्शित करें।

0

क्यों आप उत्पादन एक HTML फ़ाइल में डेटा नहीं? आप अपनी स्क्रिप्ट चलाने के लिए क्रॉन नौकरी चला सकते हैं जो बदले में एक HTML फ़ाइल को बढ़ाएगा जो ब्राउज़र से एक्सेस हो सकता है।

+0

मेरी स्क्रिप्ट पहले से ही HTML आउटपुट कर सकती है, लेकिन मैं प्रत्येक एक्स सेकंड को पूरा करने के लिए 'रीफ्रेश' नहीं करना चाहता हूं। – compie

संबंधित मुद्दे