Seite 1 von 1

Python HTTP-Server / CGI Skript

Verfasst: Dienstag 12. April 2005, 19:05
von mac
Erstmal ein Hallo, an alle im Forum ;)

Ich arbeite momentan das Buch "OOP mit Pyhton" von Michael Weigend durch, welches vielleicht bekannt ist. Ich bin mittlerweile bei CGI Skripte angekommen und hab das Problem, dass ich gerade nicht weiss warum er das macht, was er macht :?. Hier erstmal die beiden Skripte:

Code: Alles auswählen

# httpd.py

import CGIHTTPServer, BaseHTTPServer
httpd = BaseHTTPServer.HTTPServer(("", 8000), CGIHTTPServer.CGIHTTPRequestHandler)
httpd.serve_forever()

Code: Alles auswählen

#!/usr/bin/python2.4  
# from time import *
# z = localtime()
print 'Content-Type: text/html'
print ''
print '<html><body>'
print 'Hello world'
print '</body></html>'
So funktioniert das alles, und ich sehe ein tolles "Hello world" im Browser.
Wenn ich aber das # vor dem 'from time import *' lösche kommt folgendes ->
Hello world Content-Type: text/html Hello world
Wenn ich 'z = localtime' mit in den code schreibe zeigt der Browser nur ne weisse Seite an.

Was hab ich da übersehen ? Bzw was stimmt da nicht ?

Vielen Dank schonmal

mfg mac

GNU/Linux (archlinux) / Python 2.4.1/ Firefox 1.0.1

Re: Python HTTP-Server / CGI Skript

Verfasst: Dienstag 12. April 2005, 21:12
von gerold
mac hat geschrieben: Was hab ich da übersehen ? Bzw was stimmt da nicht ?
Hi mac!

Ohne es zu wissen -- nur mal so ein Schuss ins Blaue:

Bei CGI-Skripten ist es ja wichtig, dass zuerst der Header übertragen wird. Dieser wird durch eine Leerzeile vom anderen Kontent der Seite getrennt.
Vielleicht pfuscht irgendeine Debug-Meldung oder eine ander Art der Ausgabe beim Importieren dazwischen.

Probiere doch mal aus, ob diese Änderung des Codes etwas bewirkt:

Code: Alles auswählen

#!/usr/bin/python2.4 
print 'Content-Type: text/html'
print ''

from time import *
z = localtime()

print '<html><body>'
print 'Hello world - %s' % z
print '</body></html>'
mfg
Gerold
:-)

Verfasst: Dienstag 12. April 2005, 21:36
von mac
Hallo Gerold,

auf der Seite steht nun nur noch
Content-Type: text/html
In der shell wird folgendes ausgegeben
[mac@desktop httpserver]$ localhost.localdomain - - [12/Apr/2005 22:30:56] "GET /cgi-bin/time.py HTTP/1.1" 200 -
Traceback (most recent call last):
File "/home/mac/code/httpserver/cgi-bin/time.py", line 5, in ?
from time import *
File "/home/mac/code/httpserver/cgi-bin/time.py", line 6, in ?
z = localtime()
NameError: name 'localtime' is not defined
localhost.localdomain - - [12/Apr/2005 22:30:56] CGI script exit status 0x100
Wenn ich das Skript in der IDE laufen lasse kommt das aber eigentlich schon richtig raus
Python 2.4.1 (No.1, Apr 5 2005, 11:00:51)
[GCC 3.4.3] on desktop, No Qt-Version, threaded
>>> Content-Type: text/html

<html><body>
Hello world - (2005, 4, 12, 22, 34, 1, 1, 102, 1)
</body></html>
Was er aber mit dem time Modul macht, kann ich mir aber nicht erklären :?:

mfg mac

Verfasst: Mittwoch 13. April 2005, 09:05
von gerold
mac hat geschrieben: In der shell wird folgendes ausgegeben
File "/home/mac/code/httpserver/cgi-bin/time.py"
Hi mac!

Dein Modul heißt time.py? Von wo soll jetzt Python etwas importieren? Von time.py in deinem Ordner oder vom eingebauten Modul time? Von Modulen im aktuellen Ordner wird zuerst importiert und da findet Python kein "localtime".
Benenne einfach mal die Datei um. Ich hoffe das wars dann. :roll:

mfg
Gerold
:-)

Verfasst: Mittwoch 13. April 2005, 10:54
von mac
Ahhh ! so ein blöder Fehler ;)
Hello world - (2005, 4, 13, 11, 54, 7, 2, 103, 1)
Funktioniert wunderbar, vielen Dank.

mfg mac