Python HTTP-Server / CGI Skript

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
mac
User
Beiträge: 4
Registriert: Dienstag 12. April 2005, 18:45

Dienstag 12. April 2005, 19:05

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 12. April 2005, 21:12

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mac
User
Beiträge: 4
Registriert: Dienstag 12. April 2005, 18:45

Dienstag 12. April 2005, 21:36

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
"Wir brauchen das Unfreundliche, wir brauchen die schlechte Laune, wir brauchen die Ausraster, wenn uns jemand den Parkplatz wegnimmt. Auf dieser Basis enstand bei uns Weltliteratur." - Harald Schmidt (tZ, 19.01.05)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 13. April 2005, 09:05

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mac
User
Beiträge: 4
Registriert: Dienstag 12. April 2005, 18:45

Mittwoch 13. April 2005, 10:54

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

mfg mac
"Wir brauchen das Unfreundliche, wir brauchen die schlechte Laune, wir brauchen die Ausraster, wenn uns jemand den Parkplatz wegnimmt. Auf dieser Basis enstand bei uns Weltliteratur." - Harald Schmidt (tZ, 19.01.05)
Antworten