Hallo zusammen,
bin gerade dabei das Buch "Einstieg in Python" durch zu machen. Jetzt komme ich aber bei einem Kapitel nicht weiter. Es geht um cgi's. Zuerst wird eine HTML Datei mit zwei Feldern und einem Button aufgebaut und unter ...\xampp\htdocs\python32\ abgelegt. In dieser HTML Datei wird ein cgi script aus dem Verzeichnis \xampp\cgi-bin\python32\ angesprochen. Komischerweise wird das cgi script nicht ausgeführt und es kommt nur lediglich der ganze code von diesem cgi im Browser. Ich weiß nicht wieso das passiert. Der Xampp server läuft, in der cfg datei von xampp habe ich nach kurzem Duchfliegen auch nichts auffälliges gefunden. Kennt jemand dieses Problem? Wenn ja, wie kann dieses gelöst werden?
Danke für die Antworten.
CGI wird nur als Text ausgegeben
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Vermutlich weil der Webserver nicht konfiguriert ist CGI auszuführen. Aber machs dir doch einfacher und vergiss CGI, das nutzt seit fast 10 Jahren keiner mehr und hol dir ein ordentliches Webframework wie Django. Das kommt dann auch mit eingebautem (Entwicklungs-)Webserver, da brauchst du diese XAMP-Krücke nicht mehr.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Du willst doch Python lernen, oder?
Warum brauchst du dafür ein Kapitel über CGI-Programmierung, was in dieser Form seit Jahren niemand mehr macht? Wenn du versuchst das Kapitel wirklich "nachzuarbeiten", wirst du mehr Zeit damit verbringen einen Webserver aufzusetzen und einzurichten als wirklich Python zu lernen.
Wenn du die Grundlagen von Python verstanden hast, wird es einfach für dich sein ein Framework wir Django einzusetzen. Dann wirst du über dieses krude Zeug nur noch den Kopf schütteln.
Warum brauchst du dafür ein Kapitel über CGI-Programmierung, was in dieser Form seit Jahren niemand mehr macht? Wenn du versuchst das Kapitel wirklich "nachzuarbeiten", wirst du mehr Zeit damit verbringen einen Webserver aufzusetzen und einzurichten als wirklich Python zu lernen.
Wenn du die Grundlagen von Python verstanden hast, wird es einfach für dich sein ein Framework wir Django einzusetzen. Dann wirst du über dieses krude Zeug nur noch den Kopf schütteln.
Python-Bücher aus dem Verlag sind sowieso anscheinend nur mit etwas Vorsicht zu geniessen. Dieses verwendet zum Beispiel auch in der Python 3-Auflage immer noch das `thread`-Modul was schon seit einer Ewigkeit in der Dokumentation auf das `threading`-Modul verweist. In Python 3 heisst das Modul nun nicht mehr `thread` sondern `_thread` was endgültig klar machen sollte, dass man das nicht mehr benutzen sollte, weil Namen mit einem führenden Unterstrich aussagen „Halt! Das ist was internes, keine öffentliche API”.
Wenn man dann bei der Überarbeitung einen Hinweis auf die Umbenennung von Python 2 nach 3 schreiben kann, statt das Beispiel einfach mal auf `threading` umzustellen, was echt kein Problem darstellen sollte, dann ist das IMHO schon erschreckend. Das Beispielprogramm was dann von zwei Threads aus eine globale Variable verändert finde ich auch gruselig wegen dem ``global``. Vielleicht gehe ich da ja zu weit, aber ich finde man sollte die Anweisung in einem Anfängerbuch gar nicht erst erwähnen, geschweige denn verwenden, denn das verführt dazu sie auch in echten Programmen zu verwenden, wenn man sich keine Gedanken machen kann oder will wie man einen ordentlichen Datenfluss hinbekommt.
Wenn man dann bei der Überarbeitung einen Hinweis auf die Umbenennung von Python 2 nach 3 schreiben kann, statt das Beispiel einfach mal auf `threading` umzustellen, was echt kein Problem darstellen sollte, dann ist das IMHO schon erschreckend. Das Beispielprogramm was dann von zwei Threads aus eine globale Variable verändert finde ich auch gruselig wegen dem ``global``. Vielleicht gehe ich da ja zu weit, aber ich finde man sollte die Anweisung in einem Anfängerbuch gar nicht erst erwähnen, geschweige denn verwenden, denn das verführt dazu sie auch in echten Programmen zu verwenden, wenn man sich keine Gedanken machen kann oder will wie man einen ordentlichen Datenfluss hinbekommt.
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
ein sehr populärer Fehler bei Python CGI-Skripten ist eine fehlende Leerzeile bzw. ein fehlendes print-statement, was eine Leerzeile erzeugt. Zeig' doch mal deinen Code.
Ansonsten brauch man heute Python+CGI noch in den seltsten Fällen... WSGI ist Stand der Dinge. Das aber noch nicht roh, sondern über ein Framework wie Bottle oder Flask. Oder direkt ein all-in-one Paket a la Django.
Gruß, noisefloor
ein sehr populärer Fehler bei Python CGI-Skripten ist eine fehlende Leerzeile bzw. ein fehlendes print-statement, was eine Leerzeile erzeugt. Zeig' doch mal deinen Code.
Ansonsten brauch man heute Python+CGI noch in den seltsten Fällen... WSGI ist Stand der Dinge. Das aber noch nicht roh, sondern über ein Framework wie Bottle oder Flask. Oder direkt ein all-in-one Paket a la Django.
Gruß, noisefloor
Wobei sich cgi und wgsi nicht ausschließen. wsgi läuft nämlich auch unter cgi, wenn es sein muss. cgi ist nicht per se schlecht. Es ist halt nur langsam weil bei jeder Anfrage der ganze Interpreter gestartet werden muss.noisefloor hat geschrieben:Ansonsten brauch man heute Python+CGI noch in den seltsten Fällen... WSGI ist Stand der Dinge. Das aber noch nicht roh, sondern über ein Framework wie Bottle oder Flask. Oder direkt ein all-in-one Paket a la Django.
@samid: Das kann viele Ursachen haben. Sind die Dateien als ausführbar markiert? Enden sie auf .cgi? Ansonsten kann ich mich dem Rest anschließen, beschäftige dich nicht mit low-level cgi-Programmierung das ist Zeitverschwendung.
Hallo zusammen,
danke für die Atworten!
Eigentlich ist Django der Grund wieso ich Python lernen will. Nun ist es aber so, dass der spätere Buchverlauf auf der ganzen CGI Thematik aufbaut. Und ich möchte wirklich das Buch komplett durcharbeiten, schließlich habe ich dafür auch Geld bezahlt. Als nächstes kommt dann das Buch "Python von Kopf bis Fuß". Jetzt sagt nicht, dass dieses Buch auch ein Mist ist . Ok, also ausschliessen kann ich Abspeicherungsfehler, d.h. das cgi Script ist unter xampp/cgi-bin/Python32/ *.cgi abgespeichert. Hier folgt der HTML Code:
Das CGI Script ist wie folgt aufgebaut:
danke für die Atworten!
Eigentlich ist Django der Grund wieso ich Python lernen will. Nun ist es aber so, dass der spätere Buchverlauf auf der ganzen CGI Thematik aufbaut. Und ich möchte wirklich das Buch komplett durcharbeiten, schließlich habe ich dafür auch Geld bezahlt. Als nächstes kommt dann das Buch "Python von Kopf bis Fuß". Jetzt sagt nicht, dass dieses Buch auch ein Mist ist . Ok, also ausschliessen kann ich Abspeicherungsfehler, d.h. das cgi Script ist unter xampp/cgi-bin/Python32/ *.cgi abgespeichert. Hier folgt der HTML Code:
Code: Alles auswählen
<html>
<body>
<b>Bitte senden Sie Ihre Daten:</b><p>
<form action="../../cgi-bin/Python32/server_antworten.cgi">
<input name="nn"> Nachname<p>
<input name="vn"> Vorname<p>
<input type="submit">
</form>
</body>
</html>
Code: Alles auswählen
#!C:/Python32/python.exe
#Modul cgi
import cgi, cgitb
#Ausgabe bei Fehler
cgitb.enable()
#Objekt der Klasse FieldStorage
form = cgi.FieldStorage()
#Einzelne Elemente des Objekts
if "nn" in form:
nn = form["nn"].value
if "vn" in form:
vn = form["vn"].value
#HTML - Dokument mit Variablen
print("Content-type: text/html")
print()
print("<html>")
print("<body>")
print("<p><b>Registrierte Daten:</b></p>")
print("<p>Nachname:", nn, "</p>")
print("<p>Vorname:", vn, "</p>")
print("</body>")
print("</html>")
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Vermutlich ist irgendwas mit deiner Apache-Konfiguration falsch, etwa ExecCGI nicht gesetzt oder sowas. Alternativ kannst du einfach den Python CGI-Server starten, geht unter Python 3 mit ``python -m http.server --cgi 8000`` und dann werden alle Dateien im Unterordner ``cgi-bin`` als CGI-Skripte ausgeführt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Auf http://wiki.python.de/Web-Skripte%20zum ... %20bringen gibt es eine "Liste der möglichen Ursachen" die man abarbeiten kann. Dabei sind viele Punkte auch für andere Schnittstellen als CGI relevant.
Ich glaube ich weiß an was es hängt. Wenn ich in der HTML Datei den Pfad von "../../cgi-bin/...." auf "http://localhost/cgi-bin/..... ändere, dann funktioniert es.