Seite 1 von 1

CGI Skript läuft nicht

Verfasst: Montag 14. März 2011, 17:03
von rhersel
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.

Re: CGI Skript läuft nicht

Verfasst: Montag 14. März 2011, 17:39
von BlackJack
@rhersel: Beim CGI-Skript ist auch das "executable bit" gesetzt?

Re: CGI Skript läuft nicht

Verfasst: Montag 14. März 2011, 21:29
von rhersel
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/

Re: CGI Skript läuft nicht

Verfasst: Montag 14. März 2011, 21:36
von 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.

Re: CGI Skript läuft nicht

Verfasst: Montag 14. März 2011, 21:52
von rhersel
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.

Re: CGI Skript läuft nicht

Verfasst: Montag 14. März 2011, 22:19
von ms4py
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?

Re: CGI Skript läuft nicht

Verfasst: Montag 14. März 2011, 23:05
von rhersel
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

Re: CGI Skript läuft nicht

Verfasst: Montag 14. März 2011, 23:32
von deets
WSGI, mit dem Modul wsgiref das ab Python2.5 gleich mitgeliefert wird.

Re: CGI Skript läuft nicht

Verfasst: Dienstag 15. März 2011, 09:14
von ms4py
Als Server würde ich in diesem Fall cherrypy verwenden, das ist pure Python und läuft somit ohne Installation out of the box.

Re: CGI Skript läuft nicht

Verfasst: Donnerstag 17. März 2011, 21:29
von noisefloor
Hallo,

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

Gruß, noisefloor

Re: CGI Skript läuft nicht

Verfasst: Freitag 18. März 2011, 01:07
von Leonidas
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.

Re: CGI Skript läuft nicht

Verfasst: Freitag 18. März 2011, 06:18
von Hyperion
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.