Python CGI - Anfängliche schwierigkeiten

Django, Flask, Bottle, WSGI, CGI…
Antworten
NiklasRosenstein
User
Beiträge: 17
Registriert: Donnerstag 16. Juni 2011, 21:38

Hallo !
Ich bin neu hier im Forum. Ich hoffe hier eine Antwort auf meine Frage/n zu finden. :)

Ich programmiere seit ca. 6 Monaten mit Python, überwiegend in der 3D-Software Cinema  4D.

Nun bin ich auf "Python CGI" gestoßen. Ich bin sehr interesseriert daran dynamische Websites mithilfe von Python zu erstellen.
Wie ein solches Skript aussieht, habe ich mittlerweile verstanden.
Nur, ich bekomme es partout nicht hin, das Skript korrekt auszuführen.

Ich habe mir einen freien Webserver von heliohost.org "zugelegt". Laut deren Webauftritt unterstützen ihre Server Python.

Ich habe keine Ahnung von Web, Server oder irgendetwas, das damit zu tun hat.

Nach einigen Stunden googlen bin ich zu folgenden Erkenntnissen gekommen:

- die hashbang ist notwendig
- durch eine .htaccess-Datei wird definiert dass eine .py Datei als CGI-Skript ausgeführt wird
- durch direkten Zugriff auf den Skript wird es ausgeführt, solange definiert


Nun habe ich eine html Datei erstellt auf welcher ein Link direkt zum Skript erscheint.
Beim klicken auf den Link bekommenich nur einen 500 Internal Server Error.
(Siehe meine Seite hier: niklasrosenstein.heliohost.org

Was ich ausserdem schon probiert hatte war folgendes:
<html>
<body>
<!--#include virtual="cgi-bin/test.py"-->
</body>
</html>

Aber das hat auch nicht funktioniert. Irgendsoein "errer processing this directive" error.


Im Internet konnte ich alle möglichen Beispiele zur CGI Skripten finden, aber nicht wie das auf dem Server aussieht, einbinden in  HTML, die Dateistruktur oder überhaupt wie man dem Server sagt, dass er das Skripr ausführt und das stdout dann an den Client schickt.

Ich danke schoneinmal vielmals im Vorraus !
Niklas
BlackJack

@NiklasRosenstein: In der Fehlermeldung, die ausgeliefert wird, findet sich dieser schöne Satz: „More information about this error may be available in the server error log.” Was sagt denn das error log zu dem Zeitpunkt, wo Du versuchst auf das Skript zuzugreifen?
NiklasRosenstein
User
Beiträge: 17
Registriert: Donnerstag 16. Juni 2011, 21:38

Hallo BlackJack,
danke für deine schnelle Antwort.

Ich bin sehr verwirrt wegen dem was ich da im Error Log sehe. Nähmlich eigentlich so gut wie garnichts.
Ich habe mehrfach auf den link geklickt und somit auch den Fehler verursacht, aber das ist alles was im Log stand:

Code: Alles auswählen

[Thu Jun 16 15:26:22 2011] [error] [client 84.151.222.237] File does not exist: /home/nux95/public_html/500.shtml, referer: http://niklasrosenstein.heliohost.org/
[Thu Jun 16 15:26:22 2011] [error] [client 84.151.222.237] (12)Cannot allocate memory: couldn't spawn child process: /home/nux95/public_html/main.py, referer: http://niklasrosenstein.heliohost.org/
[Thu Jun 16 15:20:45 2011] [error] [client 84.151.222.237] File does not exist: /home/nux95/public_html/500.shtml, referer: http://niklasrosenstein.heliohost.org/
[Thu Jun 16 15:11:21 2011] [error] [client 84.151.222.237] File does not exist: /home/nux95/public_html/500.shtml, referer: http://niklasrosenstein.heliohost.org/
[Thu Jun 16 15:07:21 2011] [error] [client 87.162.98.138] File does not exist: /home/nux95/public_html/500.shtml
[Thu Jun 16 15:07:07 2011] [error] [client 87.162.98.138] File does not exist: /home/nux95/public_html/404.shtml
[Thu Jun 16 15:07:07 2011] [error] [client 87.162.98.138] script not found or unable to stat: /home/nux95/public_html/cgi-bin
[Thu Jun 16 15:04:33 2011] [error] [client 87.162.98.138] File does not exist: /home/nux95/public_html/500.shtml, referer: http://niklasrosenstein.heliohost.org/
[Thu Jun 16 15:04:22 2011] [error] [client 87.162.98.138] File does not exist: /home/nux95/public_html/404.shtml
[Thu Jun 16 15:04:22 2011] [error] [client 87.162.98.138] File does not exist: /home/nux95/public_html/favicon.ico
[Thu Jun 16 14:20:59 2011] [error] [client 84.151.222.237] File does not exist: /home/nux95/public_html/500.shtml, referer: http://niklasrosenstein.heliohost.org/
Nichts von heutigen Fehlern ? :K

Danke,
Niklas

//edit:
Oh, diese Zeile habe ich völlig übersehen:

Code: Alles auswählen

[Thu Jun 16 15:26:22 2011] [error] [client 84.151.222.237] (12)Cannot allocate memory: couldn't spawn child process: /home/nux95/public_html/main.py, referer: http://niklasrosenstein.heliohost.org/
Auch wenn der Fehler nicht von heute ist, was kann das bedeuten ?
BlackJack

@NiklasRosenstein: Das bedeutet, dass nicht mehr genug Speicher vorhanden ist um das Skript zu starten. Was gibt es denn da für Begrenzungen? Oder hast Du eventuell nebenher noch andere Programme/Skripte laufen?
NiklasRosenstein
User
Beiträge: 17
Registriert: Donnerstag 16. Juni 2011, 21:38

Also andere Skripte habe ich ziemlich sicher nicht noch nebenbei laufen. Bekomme das mit Python ja nicht hin und von Php etc. habe ich sowieso keine Ahnung. :D

Das ist aber schon seltsam, dass nicht genug Speicher vorhanden ist, oder ?
Das ist ein absolut simples Skript:

Code: Alles auswählen

#!/usr/bin/python

print "Content-Type: text/html"
print

print "Hello World !"
Kann es sein, dass ich im cPanel erst noch etwas konfigurieren muss ?


Danke,
Niklas

PS: Im cPanel steht nichtmal irgendwas zu Python. Ist das normal ? Das einzige was ich dort sehe ist etwas zu Php und Ruby on Rails undso.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Auch wenn hier viele die Meinung vertreten, dass man durchaus mit CGI anfangen kann, hier mal ein Link, welcher die ganze Thematik hübsch zusammenfasst und Tipps und Hinweise gibt.

Ich würde es mal so sagen wollen: Du plagst Dich gerade mit dem Deployment ab, welches a priori noch nicht notwendig ist. Mit einem Framework kannst Du lokal bereits Deine Applikation entwickeln und testen. Wenn diese einen Status erreicht hat, dass Du sie online stellen willst, musst Du Dich dann ein wenig mühen und Dir ggf. einen anderen Hoster suchen. Auf jeden Fall dürfte die Motivation höher sein, wenn man im Browser schnell sieht, dass etwas funktioniert - und der Inhalt muss ja nun mal nicht übers Netz kommen :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten