CGI Skript läuft nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Ich bin wohl der 1000. der das fragt :roll:
Auf Ubuntu 10.10 erscheint in Firefox beim Aufruf eines CGI Skripts der Download-Dialog anstatt es auszuführen.
Folgende Rahmenbedingung
Server ist:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import CGIHTTPServer
import BaseHTTPServer

class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
	cgi_directories = ["/cgi-bin"]

PORT = 8000

httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()
Testscript sieht so aus:

Code: Alles auswählen

#!/usr/bin/env python
print "Hallo CGI!"
Die Rechte des Testscripts und des CGI Verzeichnisses sind:

Code: Alles auswählen

-rwxrwxrwx 1 ralf ralf   42 2011-03-14 16:26 test.py*
drwxrwxrwx 2 ralf ralf 4096 2011-03-14 16:18 cgi-bin/
Der Cache von Firefox ist geleert.
Mir fällt nach stundenlangem Anleitungslesen nicht mehr ein woran es noch liegen könnte.
BlackJack

@rhersel: Beim CGI-Skript ist auch das "executable bit" gesetzt?
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Ja, für die Datei 'test.py' ist unter 'Zugriffsrechte' der Haken bei 'Datei als Programm ausführen' gesetzt. Ich nehme an, das ist das 'executable bit'.

Muss der Webserver evtl. mit Root-Rechten gestartet werden?
Müssen die Dateien (Webserver und CGI-Skript) vielleicht an einer bestimmten Stelle im Verzeichnisbaum stehen; jetzt liegen sie unter /home/user/blabla/webserver/cgi-bin/
BlackJack

@rhersel: Das CGI-Skript muss *in* dem `cgi-bin/`-Verzeichnis liegen. Und das Verzeichnis direkt über dem `cgi-bin/` muss das Arbeitsverzeichnis für den Webserver-Prozess sein.
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

So sieht das bei mir aus:

Code: Alles auswählen

ralf@ralf-laptop:~/Development/python/vindeco/webserver$ tree
.
|-- cgi-bin
|   `-- test.py
`-- httpd.py
httpd.py ist der Webserver. Der Webserver liegt somit in seinem eigenen Arbeitsverzeichnis.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Versuch es mal mit "test.cgi", evt. hat der Handler Probleme mit der Endung.

Dass CGI veraltet ist und nicht mehr verwendet werden sollte, ist bekannt?
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Das war es. Wenn die Datei 'test.cgi' heisst funktioniert es.

Vielen Dank für eure Unterstützung :D

Ja ich weiss, dass CGI veraltet, langsam und unsicher ist. Kennt ihr eine alternative Methode die mindestens genauso einfach ist und mit dem Python-eigenen Webserver funktionier
deets

WSGI, mit dem Modul wsgiref das ab Python2.5 gleich mitgeliefert wird.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Als Server würde ich in diesem Fall cherrypy verwenden, das ist pure Python und läuft somit ohne Installation out of the box.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

nacktes WSGI auf Python heraus ist aber IMHO recht mühselig. Dann lieber Bottle oder Flask nehmen, dass ist komfortabler. :-)

Gruß, noisefloor
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ms4py hat geschrieben:Als Server würde ich in diesem Fall cherrypy verwenden, das ist pure Python und läuft somit ohne Installation out of the box.
Ähm, das ist wsgiref auch und ist sogar Teil der Stdlib. Und gerade CherryPy als "externer" WSGI-Server hat kaum irgendwelche interessanten Features als dass es sich lohnen würde das statt irgendeinem anderem WSGI-Server zu nutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

noisefloor hat geschrieben: nacktes WSGI auf Python heraus ist aber IMHO recht mühselig. Dann lieber Bottle oder Flask nehmen, dass ist komfortabler. :-)
Oder eben werkzeug, wenn man auf tiefer Ebene angreifen will.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten