2009-04-08 16 views
6

मेरे पास एक पाइथन स्क्रिप्ट है जो लगातार चलती है। यह हर 30 सेकंड में जानकारी की 2 लाइनों का उत्पादन करता है। मैं इस आउटपुट को वेब पर देखने में सक्षम होना चाहता हूं। विशेष रूप से, मैं साइट को स्वतः अपडेट करने के लिए चाहता हूं (पृष्ठ को रीफ्रेश किए बिना प्रत्येक 30 सेकंड में पृष्ठ/साइट के शीर्ष पर नया आउटपुट जोड़ें)।वेब पर पाइथन स्क्रिप्ट आउटपुट प्राप्त करने का सबसे आसान तरीका क्या है?

मुझे समझ में आता है कि मैं जावास्क्रिप्ट के साथ ऐसा कर सकता हूं लेकिन क्या एक पाइथन केवल आधारित समाधान है? यहां तक ​​कि अगर जावास्क्रिप्ट जाने का रास्ता है? यदि आवश्यक हो तो मैं जावास्क्रिप्ट सीखने के इच्छुक हूं लेकिन यदि नहीं, तो मैं अजगर पर ध्यान केंद्रित करना चाहता हूं।

मूल प्रश्न के लिए खेद है, लेकिन जब भी वेब प्रोग्रामिंग की बात आती है तो मैं अभी भी अनजान हूं।

Thx!

+0

वास्तव में सभी प्रतिक्रियाओं की सराहना करते हैं। यह वास्तव में एक सुविधा चीज है - सार्वजनिक उपभोग के लिए साइट नहीं। मुझे संदेह है कि मैं जावास्क्रिप्ट मार्ग पर जाउंगा लेकिन मैं अन्य विकल्पों का भी पता लगाऊंगा। – timepilot

+0

कुछ शोध के बाद और नीचे दी गई सभी टिप्पणियों को पढ़ने के बाद, जावास्क्रिप्ट/jquery का उपयोग करने का तरीका लगता है। एचटीएमएल मेटा रीफ्रेश टैग विकल्प मेरे लिए काम कर रहा है (thx !!) लेकिन दृष्टि से मैं दोस्ताना या जीमेल के बीटा संस्करण की तरह कुछ ढूंढ रहा हूं। अगर किसी के पास आगे के बारे में कोई सुझाव है तो कृपया मुझे बताएं। सहायता के लिए फिर से Thx – timepilot

उत्तर

5

इस प्रश्न में दो चीजें हैं।

  1. वेब पर प्रस्तुति। पाइथन में करना आसान है - Django या TurboGears या किसी भी पायथन-आधारित वेब ढांचे का उपयोग करें।

  2. नया डेटा दिखाने के लिए वेब पेज का ताज़ा करें। यह दो तरीकों से किया जा सकता है।

    • कुछ फैंसी जावास्क्रिप्ट रीफ्रेश करने के लिए।

    • पृष्ठ को रीफ्रेश करने के लिए कुछ फैंसी HTML। meta refresh टैग वह है जो आप चाहते हैं। यदि आप ऐसा करते हैं, तो आपके पास एक पाइथन समाधान है।

+0

क्यों आउटपुट के बीच फ्लश बफर नहीं? – reggie

1

जावास्क्रिप्ट वेबसाइट पर इस प्रकार की अंतःक्रियाशीलता को जोड़ने का प्राथमिक तरीका है। आप बैक-एंड पायथन बना सकते हैं, लेकिन क्लाइंट को पेज अपडेट करने के लिए जावास्क्रिप्ट AJAX कॉल का उपयोग करना होगा। पाइथन ब्राउज़र में नहीं चलता है, इसलिए यदि आप केवल पायथन का उपयोग करना चाहते हैं तो आप भाग्य से बाहर हैं।

(यह भी फ़्लैश या जावा एप्लेट का उपयोग करना संभव है, लेकिन वह क्या एक छोटी सी समस्या की तरह लगता है के लिए एक सुंदर दिग्गज समाधान है।)

1

आप एक ही रास्ता या अपने 30 सेकंड ताज़ा के लिए किसी अन्य रूप में जावास्क्रिप्ट की जरूरत है। वैकल्पिक रूप से, आप वर्तमान पृष्ठ पर रीडायरेक्ट करने के लिए प्रत्येक 30 सेकंड के लिए मेटा टैग रीफ्रेश सेट कर सकते हैं, लेकिन जावास्क्रिप्ट मार्ग पेज फ़्लिकर को रोक देगा।

2

आप Comet का उपयोग कर सकते हैं, लेकिन मैं आपको ऐसा करने से दृढ़ता से हतोत्साहित करता हूं। jQuery का उपयोग करके, मैं बस एक छोटा जावास्क्रिप्ट लिखूंगा, यह वास्तव में सीधा है।

एक और संभावना एक आईफ्रेम का उपयोग है जो हर 30 सेकंड में पुनः लोड करता है, यह पूरे पृष्ठ को पुनः लोड करने से रोक देगा।

2

यदि आप इसे पूरी तरह से अजगर में करना चाहते हैं तो आप pyjamas का उपयोग कर सकते हैं।

यह सीधे पाइथन कोड से जावास्क्रिप्ट उत्पन्न करता है, इसलिए आप जावास्क्रिप्ट को पूरी तरह से लिखने से बचें।

0

क्या यह वास्तविक वेबपैप के लिए है? या ब्राउज़र में आउटपुट देखने के लिए यह एक सुविधाजनक बात है? यदि यह सुविधा के लिए अधिक है, तो आप mod_python का उपयोग करने पर विचार कर सकते हैं।

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

उम्मीद है कि यह मदद करता है ... mod_python देखें। सब कुछ कॉन्फ़िगर करने के बाद यह बहुत बुरा नहीं है।

1

एक लॉग फ़ाइल के लिए अपने उत्पादन लिखें, और वेब सर्वर के माध्यम से ब्राउज़र करने के लिए लॉग फ़ाइल लोड। आप स्वत: रीफ्रेश की जरूरत है, प्रत्येक 15 सेकंड ताज़ा करने के लिए टैग के साथ एक टेम्पलेट HTML फ़ाइल बनाने:

<META HTTP-EQUIV="refresh" CONTENT="15"> 

और server side include का उपयोग पृष्ठ पर लॉग फ़ाइल शामिल करने के लिए।

3

यदि आप पाइथन लिपि से डेटा को वेबपृष्ठ पर प्रिंट करने और स्वचालित रूप से अपडेट करने के लिए एक आसान सरल तरीका चाहते हैं, तो आप केवल स्क्रिप्ट से प्रिंट कर सकते हैं। उदाहरण के लिए, नीचे अजगर CGI स्क्रिप्ट के साथ अपाचे का उपयोग कर:

#!/usr/bin/python 

import time 
import sys 
import random 

def write(inline=''): 
    sys.stdout.write(inline) 
    sys.stdout.write('\r\n') 
    sys.stdout.flush() 

#prints out random digits between 1 and 1000 indefinitely 
write("Content-type: text/html\r\n") 
i = 0 
while(True): 
    i = i + 1 
    time.sleep(1) 
    write(str(i) + "<br />") 

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

यदि यह वास्तव में आप जो खोज रहे हैं वह वास्तव में नहीं है, तो ऐसा करने का एकमात्र अन्य तरीका स्वचालित रीफ्रेशिंग पृष्ठ (या तो एक आईफ्रेम या पूरे पृष्ठ में) या डेटा लाने के लिए जावास्क्रिप्ट के साथ है।

आप अपने आईफ्रेम या पेज एचटीएमएल स्रोत में मेटा रीफ्रेश टैग का उपयोग कर सकते हैं, और आपका सीजीआई हर बार ताज़ा होने पर नए डेटा को प्रिंट कर सकता है। वैकल्पिक रूप से, आप बिना किसी दृश्य पृष्ठ रीफ्रेश किए नए डेटा को पढ़ने के लिए XMLHTTPRequest के साथ जावास्क्रिप्ट का उपयोग कर सकते हैं।

+0

इसे धूमकेतु कहा जाता है, लेकिन यह हर ब्राउज़र के साथ काम करने की गारंटी नहीं है। (और समय-समय पर समस्याएं हो सकती हैं।) –

+0

सभी अच्छे अंक, यह वास्तव में केवल ओपी की तलाश के विवरण पर निर्भर करता है। मेरा अनुमान जावास्क्रिप्ट का डैश बेहतर समाधान होगा। – Jay

+0

वेब पेज पर 'जबकि (i <10) 'के साथ, यह अंत में पूरे आउटपुट को प्रदर्शित कर रहा है, न कि इंटरमीडिएट स्तर जो वास्तविक समय है। एक-एक करके प्रिंट करने का कोई तरीका, अंत में नहीं? – npatel

1

शायद "long polling" क्या आप देख रहे हैं?

लंबे मतदान को "HTTP पुश" के रूप में वर्णित किया जा सकता है, मूल रूप से आपके पास एक वेब-सर्वर के माध्यम से एक (पायथन) स्क्रिप्ट की सेवा की जाती है, जो केवल उपलब्ध होने पर डेटा आउटपुट करता है .. फिर आप जावास्क्रिप्ट के माध्यम से इस पृष्ठ को अतुल्यकालिक रूप से लोड और लोड करते हैं, यह आप फिर से प्रयास, जब यह सफल होता है आप डेटा (यह प्रदर्शित करते हैं, आमतौर पर)

उदाहरण my answer में PHP में कर रहे हैं के साथ कुछ करने में विफल रहता है, लेकिन यह वास्तव में यह केवल 2 आदेश (sleep(rand(1, 10)) है - अन्य कुछ जावास्क्रिप्ट का प्रदर्शन करने के लिए कर रहे हैं त्रुटि प्रबंधन)

ठीक है, यह काफी इतना आसान नहीं है .. आप केवल एपीए के माध्यम से एक सीजीआई पायथन लिपि की सेवा नहीं कर सकते चे, आप कार्यकर्ता धागे से बाहर चलाने क्योंकि जाएगा, और वेब सर्वर किसी भी आगे कनेक्शन स्वीकार करने में सक्षम नहीं होगा .. तो, आप एक अधिक विशिष्ट सर्वर का उपयोग करने की जरूरत है ..

  • twisted अजगर रूपरेखा इस तरह के सर्वर के लिए एकदम सही है - निम्नलिखित दो सर्वर संयोग से दोनों यह
  • cometd के साथ लिखा - "सबसे प्रसिद्ध" लंबे समय से पोलिंग सर्वर बात है, हालांकि मैं अजगर कार्यान्वयन
  • slosh के साथ बहुत किस्मत नहीं था - अत्यंत बस लगता है उपयोग करने के लिए..पाइथन में कार्यान्वित, हालांकि आप HTTP अनुरोधों के माध्यम से इसके साथ बातचीत कर सकते हैं
संबंधित मुद्दे

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