2008-12-18 12 views
9

मैं एक वेब ब्राउजर से काम करने के लिए पाइथन स्क्रिप्ट प्राप्त करने की कोशिश कर रहा हूं। मैं त्रुटि प्राप्त हो रही: मैं अपने त्रुटि लॉग मैं संदेश दिखाई जाँच जबकाम करने के लिए पाइथन प्राप्त करना, आंतरिक सर्वर त्रुटि

500 Internal Server Error 

Premature end of script headers 

इस त्रुटि के केवल प्रलेखन ऑनलाइन कहना है कि यह अनुचित लाइन वापसी वर्ण होने का नतीजा हो सकता है आपकी लिपि में, लेकिन मैंने अपनी टेस्ट स्क्रिप्ट को सीधे पिको के साथ खोल से लिखा था। साथ ही, जब मैं कमांड लाइन से फ़ाइल चलाता हूं तो यह ठीक है। AddHandler cgi-स्क्रिप्ट "पंक्ति" अब तक केवल परिवर्तन मैं अपाचे के लिए बना दिया है करने के लिए .py जोड़ने के लिए है। "

धन्यवाद!


त्वरित प्रतिक्रिया के लिए धन्यवाद। यहाँ है ।

#!/usr/local/bin/python 
print "Content-type: text/html\n" 
print "\n\n" 
print "<HTML>" 
print "<HEAD>" 
print "<TITLE>Test</TITLE>" 
print "</HEAD>" 
print "<BODY>" 
print "<H2>Hi there.</h2>" 
print "</BODY>" 
print "</HTML>" 

कुछ अन्य विवरण:। मैं अपाचे 1.3 चल रहा हूँ और mod_python की जरूरत नहीं है मैं परीक्षण कोड के नवीनतम संस्करण को मैं उत्पादन से पहले आपको कुछ नई लाइनों के रूप में सुझाव दिया, लेकिन अभी भी एक ही त्रुटि मिलती है जोड़ा मेरे जैसे .py पहचानने के लिए अपाचे सेट करें ऊपर ntioned। मैं मुख्य public_html फ़ोल्डर से स्क्रिप्ट चला रहा हूं।


एक अद्यतन। ऐसा लगता है कि मैंने शेबांग लाइन में क्या रखा है। मैंने सभी सुझावों का प्रयास किया और यहां तक ​​कि अगर मैं इसे खाली छोड़ देता हूं तो भी त्रुटि त्रुटियों में एक ही त्रुटि दिखाई दे रही है और मुझे 500 त्रुटि मिल रही है।

मैं डब्ल्यूएचएम/सीपीएनल स्थापित के साथ लिनक्स (लाल टोपी 3.4) पर अपाचे/1.3.41 चला रहा हूं।

उत्तर

5

दो चीजें तुरंत दिमाग में वसंत करती हैं।

  1. सुनिश्चित करें कि आप Content-Type: text/html हैडर
  2. outputting रहे हैं सुनिश्चित करें कि आप आप उत्पादन "Hello, world" या जो कुछ भी करने से पहले हेडर के बाद दो नई पंक्तियां ("\ n") जोड़ रहे हैं सुनिश्चित करें।
7

क्या आपके पास कुछ और प्रिंट करने से पहले शीर्ष पर ऐसा कुछ है?

print "Content-type: text/html\n" 

यदि आपके पास पहले से ही है, तो अपना कोड पोस्ट करें।

+0

दो \ n (हेडर के बाद HTTP को खाली रेखा की आवश्यकता होती है) – bortzmeyer

1

आप भी अपने अजगर स्क्रिप्ट के शीर्ष पर इस लाइन को जोड़ने के द्वारा एक बेहतर त्रुटि संदेश मिल सकता है:

import cgitb; cgitb.enable()

इसके अलावा, शीर्ष लेख Content-Type पूंजीकृत किया जाना चाहिए, नहीं Content-type है, हालांकि मुझे लगता है कि है कि शक कुछ तोड़ रहा है

+0

मैंने स्क्रिप्ट के शीर्ष पर उस पंक्ति को जोड़ा और "टाइप" को पूंजीकृत किया लेकिन अभी भी एक ही त्रुटि और कोई अतिरिक्त जानकारी नहीं मिल रही है। – user47514

+0

आपकी शेबांग लाइन कैसी दिखती है? और आपका मंच क्या है? – Triptych

+0

वास्तव में, पूंजीकरण हेडर नामों के लिए कोई फर्क नहीं पड़ता। HTTP मानक, आरएफसी 2616, धारा 4.2 में कहता है कि HTTP शीर्षलेखों में आरएफसी 822 के शीर्षलेख के समान सामान्य वाक्यविन्यास होता है। और आरएफसी 822, धारा 3.4.7, कहता है कि हेडर नाम केस-असंवेदनशील हैं। – bortzmeyer

11

यह सही व्यवहार है जो आपको मिलेगा यदि आपकी पाइथन लिपि में निष्पादन योग्य अनुमति सेट नहीं है।

प्रयास करें:

chmod a+x foo.py 

(जहां foo।पीई आपकी लिपि का नाम है)।

अधिक जानकारी के लिए Apache tutorial देखें।

+0

हे, यह शायद सही है। कैंट 'मानते हैं कि मैंने इसके बारे में नहीं सोचा था। – Triptych

4

ठीक पिछले अनुमान:

#!/usr/bin/env python 

या

#!/usr/bin/local/env python 

यह भी अपने मंच/होस्टिंग प्रदाता पता करने के लिए मददगार होगा:

कि कुटिया लाइन के लिए बदल रहा है कोशिश कर रहा।

+1

धन्यवाद !! @Triptych, यह मेरी मदद की। :) –

0

मैं एक समान समस्या मेरे अपने स्थानीय सर्वर चल रहा था, लेकिन मिल गया यह निम्नलिखित हल इस गाइड कदम दर कदम: HOWTO Use Python in the web

0

आप एक स्क्रिप्ट एक यूनिक्स मशीन पर विंडोज में लिखा उपयोग कर रहे हैं मेरे लिए ध्वनि , पहली बार लाइन-एंडिंग को 0 डी 0 ए से 0 ए में परिवर्तित किए बिना। इसे परिवर्तित करना आसान होना चाहिए। एक तरीका आपके एफटीपी कार्यक्रम के साथ है; फ़ाइल को ASCII मोड में स्थानांतरित करें। मेटापैड के साथ जिस तरह से उपयोग किया जाता है, वह सहेजने से पहले फ़ाइल-> फ़ाइलफॉर्मेट का उपयोग करना है।

0

मैं अजगर अपाचे के साथ काम कर पाने के लिए ठीक से और अंत में अपाचे + mod_WSGI + web.py उपयोग करने के साथ बसे कई दृष्टिकोण की कोशिश की। यह बहुत कुछ लगता है, लेकिन यह Django जैसे जटिल ढांचे का उपयोग करने से कहीं अधिक सरल है।

(आप सही हैं, mod_python से परेशान नहीं है)

ध्यान दें, मैं Apache2 उपयोग कर रहा हूँ, लेकिन mod_wsgi रूप में अच्छी तरह 1.3 पर काम करता है, modwsgi page पर आधारित है।

आप Redhat पर हैं, तो मेरा मानना ​​है कि आप यम है, तो अपाचे WSGI मॉड्यूल और अन्य अजगर पैकेज प्राप्त करने के लिए सुनिश्चित करें:

$ yum update 
$ yum install gcc gcc-c++ python-setuptools python-devel 
$ yum install httpd mod_wsgi 

और अजगर के अपने संस्करण के लिए web.py मिलता है। उदाहरण के लिए, easy_install का उपयोग कर। मेरे पास v2.6 है।

$ easy_install-2.6 web.py 

अपने अजगर स्क्रिप्ट के लिए एक निर्देशिका बनाएँ: /opt/local/apache2/wsgi-scripts/

अपने httpd.conf में:

LoadModule wsgi_module modules/mod_wsgi.so 

# note foo.py is the python file to get executed 
# and /opt/local/apache2/wsgi-scripts/ is the dedicated directory for wsgi scripts 
WSGIScriptAlias /myapp /opt/local/apache2/wsgi-scripts/foo.py/ 

AddType text/html .py 

<Directory /opt/local/apache2/wsgi-scripts/> 

    Order allow,deny 
    Allow from all 
</Directory> 

ध्यान दें कि web.py एक "टेम्पलेट्स निर्देशिका" का उपयोग करता है। इसे wsgi निर्देशिका में रखें, /opt/local/apache2/wsgi-scripts/templates/

$def with (text) 
<html> 
<body> 
Hello $text. 
</body> 
</html> 

उपयुक्त अनुमतियों जोड़ें:

एक फ़ाइल /opt/local/apache2/wsgi-scripts/templates/mytemplate.html बनाएँ।

$ chown -R root:httpd /opt/local/apache2/wsgi-scripts/ 
$ chmod -R 770 /opt/local/apache2/wsgi-scripts/ 

अपने अजगर फ़ाइल में foo.py:

import web 

urls = ('/', 'broker',) 
render = web.template.render('/opt/local/apache2/wsgi-scripts/templates/') 

application = web.application(urls, globals()).wsgifunc() 

class broker: 
    def GET(self): 
     return render.mytemplate("World") 

ऊपर परिणाम लौटने से पहले शब्द "दुनिया" के साथ mytemplate में विशेष web.py $ पाठ चर की जगह लेगा।

http://ivory.idyll.org/articles/wsgi-intro/what-is-wsgi.html

0

आप भी इस एक ही मूर्खता से कुछ प्राप्त कर सकते हैं अगर आप एक linux वेब सर्वर पर लाइनों की डॉस शैली अंत है। (यह सिर्फ मेरी सुबह के लगभग दो घंटे चबाने लगा।) इस विंडोज़ बॉक्स पर मेरे vim.rc को अपडेट करने के लिए मुझे उपयोग करने की आवश्यकता है।

0

मुझे एक ही समस्या थी, समस्या यह है कि सामग्री प्रकार को मुद्रित करने के बाद आपको दो लाइनों को तोड़ने की आवश्यकता है। निम्नलिखित मेरे लिए काम किया:

#!/usr/local/bin/python2.6 
print('Content-type: text/html\r\n') 
print('\r\n') 
print('Hello, World!') 
1

एक आम त्रुटि गलत पथ है। मैं अपना मामला यह यूएसआर/बिन/पायथन था। अन्य सामान्य त्रुटि ASCII मोड में फ़ाइल को स्थानांतरित नहीं कर रही है। मैं WinSCP का उपयोग कर रहा हूं जहां आप इसे आसानी से सेट कर सकते हैं: विकल्प-> प्राथमिकताएं-> स्थानान्तरण-> संपादित करें पर क्लिक करें और टेक्स्ट को टेक्स्ट में बदलें।

इस कोड को काम करना चाहिए:

#!/usr/bin/python 
print "Content-type: text/html\n\n"; 
print "<html><head>"; 
print "<title>CGI Test</title>"; 
print "</head><body>"; 
print "<p>Test page using Python</p>"; 
print "</body></html>"; 
2

आप कॉन्फ़िगर किया है अपाचे httpd फ़ाइल ठीक से तो आप निम्न दो reasons.Make सुनिश्चित करें कि इन सही हैं के लिए यह त्रुटि मिल रही हो सकता है।

  1. '#!/Usr/bin/python' या '#! सी:/पायथन 27/पायथन' या तदनुसार अपनी लिपि में पहली पंक्ति के रूप में शामिल करें।
  2. सुनिश्चित करें कि "सामग्री-प्रकार: टेक्स्ट/एचटीएमएल" यानी प्रिंट के बाद जगह है।
    प्रिंट "सामग्री-प्रकार: टेक्स्ट/एचटीएमएल \ n \ n";
    उम्मीद है कि यह मदद करता है !!
+0

बहुत बहुत धन्यवाद। मैं विश्वास नहीं कर सकता कि "1. शामिल करें '#!/Usr/bin/python' ...." एक कारण हो सकता है। –

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