Interpreter für die erste Zeile eines CGI-Skripts auslesen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

Donnerstag 28. Februar 2008, 20:49

Hallo

Ich bin im Buch Python GE-PACKT über die Internetprogrammierung per CGISkript gestolpert und bin gerade dabei das auszuprobieren.

Da ich sonst keinen Webserver zu Verfügung habe, benutze ich einen kleinen in Python geschriebenen:

Code: Alles auswählen

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler

serveradresse =("", 8080)
server = HTTPServer(serveradresse, CGIHTTPRequestHandler)
server.serve_forever()
Diesen Code habe ich in einen Order httpserver gelegt, in dem ich auch einen cgi-bin Ordner erstellt habe.
Zum Testen habe ich mir eine kleine .html datei erstellt, die ich über
"http://localhost:8080/test.html" im Browser über diesen Server öffnen kann. (Klappt auch, wenn ich keinen Internet Anschluss habe, wenn ich stattdessen versuche testxyz.html aufzurufen, bekomme ich eine Fehlermeldung von meinem kleinen Server).

Jetzt wollte ich ein kleines Skript testen:

Code: Alles auswählen

#! /Developer/usr/bin/i686-apple-darwin8-gcc-4.0.1
from time import *

print "Content-Type: text/html"
print
print "<html><head><title> CGI-Sript </title> </head>"
print "<body><h1>Datum und Zeit </h1>"
print "Es ist ",ctime(time())+"."
print "</body></html>"
Wie man sieht, nichts großes. Diese Datei habe ich in den cgi-bin-Ordner gelegt.
Wenn ich jetzt "http://localhost:8080/cgi-bin/uhr.py" von meinem Browser (Firefox) verlange, bekomme ich von meinem Server die Fehlermeldung
localhost - - [28/Feb/2008 20:40:09] "GET /cgi-bin/uhr.py HTTP/1.1" 200 -
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/CGIHTTPServer.py", line 251, in run_cgi
os.execve(scriptfile, args, os.environ)
OSError: [Errno 13] Permission denied
localhost - - [28/Feb/2008 20:40:09] CGI script exit status 0x7f00

Erster Ansatz bei mir war jetzt die erste Zeile im eigentlichen Skript, da war ich mir nicht sicher, wenn ich die Python Shell öffne, steht da in den ersten beiden Zeilen das hier:
Python 2.5.1 (r251:54869, Apr 18 2007, 22:08:04)
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Und die Datei in der ersten Zeile hat da am besten drauf gepasst :lol:
Alternativ sieht es nach fehlenden Zugriffsrechten aus, auf die erwähnte .py habe ich aber vollen Zugriff.

Vielen Dank, dass du es dir bis hier durchgelesen hast :P

Wer also einen Tipp hat, nur her damit, mir sind die Ansätze ausgegangen.

Nikolas
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Donnerstag 28. Februar 2008, 20:57

#! /Developer/usr/bin/i686-apple-darwin8-gcc-4.0.1
das stimmt doch bestimmt nicht. Versuch mal /usr/bin/python oder gib whereis python in die Konsole ein ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

Donnerstag 28. Februar 2008, 21:05

Mit sowas hatte ich schon gerechnet. whereis python liefert /usr/bin/pyton.

Wenn ich die erste Zeil dann anpasse (#! /usr..) bekomme ich aber immer noch diese Fehlermeldung.

Hat denn der Server andere Rechte als ich? Für den Ordner in dem der cgihttpserver.py liegt, habe ich lese und schreibe Rechte... Wahrscheinlich brauch ich dort doch auch Ausführungsrechte. Könnte es daran liegen?
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

Donnerstag 28. Februar 2008, 21:12

jop mach einfach ma nen chmod +x testxyz.py oder setzt zum testen erstmal alles auf 777
kostenlose TS2-Server für jeweils 31 Tage:
http://www.ts-onlyfree.de
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

Donnerstag 28. Februar 2008, 21:26

Also noch mal langsam. Per cd habe ich mich in diesen cgi-bin Ordner bewegt, und habe dort ein "chod 777 uhr.py" ausgeführt.


Jetzt habe ich diese Fehlermeldung:
localhost - - [28/Feb/2008 21:23:51] "GET /cgi-bin/uhr.py HTTP/1.1" 200 -
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/CGIHTTPServer.py", line 251, in run_cgi
os.execve(scriptfile, args, os.environ)
OSError: [Errno 2] No such file or directory
localhost - - [28/Feb/2008 21:23:51] CGI script exit status 0x7f00
Anscheinend gibt es ein Problem mit diesem os.execve im cgihttpServer.py. Hat überhaupt schon mal jemand diesen Server benutzt? Oder kennt jemand eine andere Möglichkeit solche CGI Skripte zu testen?

Danke für eure Untersützung, ich such mal fröhlich weiter...
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
KlausS
User
Beiträge: 40
Registriert: Donnerstag 24. Januar 2008, 08:52
Wohnort: Leverkusen

Freitag 29. Februar 2008, 13:07

Hallo Nikolas,

unter XP funktioniert das Skript aus dem Buch. Ich schau mal nach dem Skript, wenn ich später zu Hause bin.

Klaus
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

Freitag 29. Februar 2008, 13:20

Vielen Dank, das ist wirklich nett von dir :P
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
KlausS
User
Beiträge: 40
Registriert: Donnerstag 24. Januar 2008, 08:52
Wohnort: Leverkusen

Freitag 29. Februar 2008, 14:50

Hallo Nikolas,

ich habe unter c:\python\httpserver die Datei webserver.py mit dem Skript

Code: Alles auswählen

#webserver.py

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
serveradresse = ("", 8080)
server = HTTPServer(serveradresse, CGIHTTPRequestHandler)
server.serve_forever()
und unter c:\python\httpserver\cgi-bin das Skript uhrzeit.py mit

Code: Alles auswählen

#!c:\python24\python.exe
from time import *

z = localtime()
print 'Content-Type: text/html'
print
print '<html><title>Erster Test</title><body>'
print '<h2>Die aktuelle Uhrzeit </h2>'
print 'Beim letzten Klick war es ', z[3],' Uhr, ', z[4], ' Minuten und ', z[5], ' Sekunden!'
print '</body></html>'
Mit dem Aufruf
kann ich das Skrpit starten.
Auch die anderen Beispiele (mit Formulardaten, Chatroom etc.) aus dem Buch OOP mit Python vom gleichen Autor laufen mit diesem Mini-Server.
Da ich Python-Neuling bin und mich mit Linux auch nicht so gut auskenne, kann ich dir ansonsten leider nicht weiterhelfen. Aber da wird sich bestimmt jemand finden.

Gruss
Klaus
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

Freitag 29. Februar 2008, 18:50

Genau so sieht das auch bei mir aus. :roll:

Danke für deine Mühe.
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
rudi69
User
Beiträge: 1
Registriert: Mittwoch 9. April 2008, 17:41

Mittwoch 9. April 2008, 17:47

Hi,

ich hatte grade genau das Problem.

Die Lösung ist einfach und doch so unnaheliegend. Arghhhh

Die Software wurde unter W*nd*ws erstellt und deshalb mit Doszeilenumbrüchen versehen. Das mag die bash gar nicht und findet den python interpreter nicht.

Also
dos2unix cgi-bin/script.py
oder perl -p -i -e's/\r\n/\/n/' cgi-bin/script.py

und alles wird gut.

Gruß,

Rudi
Antworten