Hallo zusammen,
mein erstes Posting hier. Bin Newbie, daher ist meine Frage vielleicht trivial, sorry..
Ich möchte ein CGI Skript mit Python schreiben. Einem CGI Skript übergibt man Informationen, meines Wissens nach, wie folgt:
http://domain/path/cgi-skript/path-info?query-string
In Python soll man diese Informationen dann mit einer Instanz der Klasse cgi.FieldStorage abfangen können.
Mein Problem: Ich bekomme Informationen aus dem query-string (z.B.: cgi.FieldStorage.getvalue()). Aber path-info geht irgendwie verloren. In der Dokumentation auf python.org habe ich leider keine Antwort auf meine Frage gefunden.
Kann mir jemand einen Tipp geben, was ich falsch mache bzw. wo ich nachschlagen kann? Vielen Dank!
Frage zu cgi.FieldStorage
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hallo fantomas, willkommen im Forum,
muss es denn CGI sein? Eigentlich ist CGI unter Python schon längst tot, man nutzt WSGI-Frameworks und Libs, die einem viel Arbeit abnehmen und dann unter CGI/FastCGI/SCGI/mod_wsgi/HTTP-Proxying etc. laufen.
muss es denn CGI sein? Eigentlich ist CGI unter Python schon längst tot, man nutzt WSGI-Frameworks und Libs, die einem viel Arbeit abnehmen und dann unter CGI/FastCGI/SCGI/mod_wsgi/HTTP-Proxying etc. laufen.
Warum soll CGI unter Python tot sein?
Ich habe jetzt mein erstes CGI script fertiggestellt, das ich online stelle sobald ich mich fuer einen Hoster entschieden habe. Es funktioniert tadellos. Die Parameter fuer das Skript kommen dabei aus einer HTML form (text feld und options liste).
Ich benutze cgi.FieldStorage und form.getfirst. Eigentlich easy.
Ich habe jetzt mein erstes CGI script fertiggestellt, das ich online stelle sobald ich mich fuer einen Hoster entschieden habe. Es funktioniert tadellos. Die Parameter fuer das Skript kommen dabei aus einer HTML form (text feld und options liste).
Ich benutze cgi.FieldStorage und form.getfirst. Eigentlich easy.
Es geht ja nicht darum, dass es kompliziert wäre. Die Gründe sind andere. Kannst du z.B. via Forensuche oder auch im Wiki nachlesen.hendrikS hat geschrieben:Warum soll CGI unter Python tot sein?
Ich habe jetzt mein erstes CGI script fertiggestellt, das ich online stelle sobald ich mich fuer einen Hoster entschieden habe. Es funktioniert tadellos. Die Parameter fuer das Skript kommen dabei aus einer HTML form (text feld und options liste).
Ich benutze cgi.FieldStorage und form.getfirst. Eigentlich easy.
@Leonidas: Gelegentlich ist man drauf angewiesen, weil der Webhoster, dem man sich anvertraut hat, nicht mehr zu bieten hat. Für Einstiegsexperimente reicht es ja auch aus.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo fantomas!
Das Skript (ganz unten) auf dieser Seite [wiki]CGI[/wiki] zeigt dir an, welche Informationen du vom Webserver übergeben bekommst.
mfg
Gerold

Das Skript (ganz unten) auf dieser Seite [wiki]CGI[/wiki] zeigt dir an, welche Informationen du vom Webserver übergeben bekommst.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Man kann WSGI auch auf CGI laufen lassen. Deswegen ist direkte CGI-Programmierung tot.numerix hat geschrieben:@Leonidas: Gelegentlich ist man drauf angewiesen, weil der Webhoster, dem man sich anvertraut hat, nicht mehr zu bieten hat. Für Einstiegsexperimente reicht es ja auch aus.
Zusätzlich zu CGI bietet es aber die Vorteile, dass es nicht auf CGI beschränkt ist und dass man alle WSGI-Apps/Libs verwenden kann. Also warum sich selbst mit CGI einschränken?
Kannst mal kurz erläutern was das praktisch bedeutet?Leonidas hat geschrieben: Man kann WSGI auch auf CGI laufen lassen.
Ich verstehe es so: Eine WSGI Webapplikation wuerde auch funktionieren, wenn kein WSGI server vorhanden ist. Richtig?
Es gibt offenbar rund keinen Hoster, der so was anbietet. Wenn man sich so die Angebote durchliest, ist von WSGI nie die Rede.
Oder ich stelle die Frage mal so:
Welche Voraussetzungen muss ein Webhoster bieten, um eine WSGI basierende Applikation laufen zu lassen?
Zuletzt geändert von hendrikS am Montag 16. Februar 2009, 00:43, insgesamt 1-mal geändert.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
So etwas wie WSGI-Server gibt es gar nicht. Das sind eigentlich zwei orthogonale Konzepte.hendrikS hat geschrieben:Ich verstehe es so: Eine WSGI Webapplikation wuerde auch funktionieren, wenn kein WSGI server vorhanden ist. Richtig?
Naja, weil nur ``mod_wsgi`` WSGI auch im Namen trägt. Aber man kann WSGI-Konforme Programme ja auch auf FastCGI laufen lassen. Oder wenn es sein muss ``mod_python``. Und diese Deployment-Möglichkeiten bieten einige Hoster durchaus. Der Geschwindigkeitsvorteil wenn das Skript nicht wie bei CGI jedes mal neu gestartet werden muss ist beträchtlich - WSGI bietet einem die Möglichkeit das auszunutzen, CGI nicht.hendrikS hat geschrieben:Es gibt offenbar rund keinen Hoster, der so was anbietet. Wenn man sich so die Angebote durchliest, ist von WSGI nie die Reede.
Einen Python-Interpreter und CGI oder besser.hendrikS hat geschrieben:Oder ich stelle die Frage mal so:
Welche Voraussetzungen muss ein Webhoster bieten, um eine WSGI basierende Applikation laufen zu lassen?
Schau dir doch mal HOWTO Use Python in the web an.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo!numerix hat geschrieben:Das war mir nicht bewusst - hatte ich bisher anders verstandenLeonidas hat geschrieben:Man kann WSGI auch auf CGI laufen lassen.
WSGI hinter CGI ist noch langsamer als reines CGI -- weil dann auch noch die WSGI-Bibliothek(en) bei jeder Anfrage neu geladen werden müssen.
Um sich an die Internetprogrammierung heranzutasten, halte ich CGI für eine gute Sache. Daten von einem HTML-Formular empfangen und vielleicht mal ein Email verschicken -- ja, dafür ist CGI gar nicht mal so schlecht geeignet. Aber, mehr sollte man nicht von CGI erwarten. Meine Meinung: Sobald die Frage nach Session-Variablen, Benutzerverwaltung oder gar Datenbankanbindung auftaucht, sollte man die Finger von CGI lassen.
Für weniger als 10 Euro im Monat, bekommt man schon einen V-Server, auf dem man alles tun kann was man möchte. Dort kann man **mod_wsgi** installieren und damit die Webanwendung so performant wie möglich ausführen lassen. Und ab diesem Moment sind auch WSGI und die darauf basierenden Tools und Frameworks interessant.
CGI -- kurz mal reinschnuppern und ein paar Kleinigkeiten damit machen. Und als nächste Entwicklungsstufe -- Tools und Frameworks für die Internetentwicklung nutzen.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Dann hatte ich das doch richtig verstanden.gerold hat geschrieben:CGI -- kurz mal reinschnuppern und ein paar Kleinigkeiten damit machen. Und als nächste Entwicklungsstufe -- Tools und Frameworks für die Internetentwicklung nutzen.

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wieviel langsamer? Sprechen wir von tatsächlichen Zahlen oder "es muss langsamer sein, weil es mehr lädt"?gerold hat geschrieben:WSGI hinter CGI ist noch langsamer als reines CGI -- weil dann auch noch die WSGI-Bibliothek(en) bei jeder Anfrage neu geladen werden müssen.
Django über CGI ist in der Tat zu langsam, aber das liegt daran, dass Django ziemlich groß und nicht auf Startgeschwindigkeit optimiert ist, da dauert das kompilieren der URL-Regex schonmal etwas etc. Dabei gibt es durchaus auch schneller startende Libs.
Sehe ich anders.gerold hat geschrieben:CGI -- kurz mal reinschnuppern und ein paar Kleinigkeiten damit machen. Und als nächste Entwicklungsstufe -- Tools und Frameworks für die Internetentwicklung nutzen.
Also ich habe es immer noch nicht so richtig kapiert.
Es ist in allen Dokus von WSGI Servern die Rede. Leonidas sagt, die gäbe es eigentlich nicht.
Die vorhandenen Demo Applikationen habe ich so ans Laufen gebracht.
1.) Ich starte die Applikation (den Server) in einer DOS Box
2.) Ich führe die selbe Applikation wie gehabt über den Webserver/Interpreter aus
Irgendwie komisch. Mir fehlt hier noch das große Bild. Wobei ich ein solches tatsächlich in den ganzen Dokumentationen vermisse. Wäre hier wirklich hilfreich.
Es ist in allen Dokus von WSGI Servern die Rede. Leonidas sagt, die gäbe es eigentlich nicht.
Die vorhandenen Demo Applikationen habe ich so ans Laufen gebracht.
1.) Ich starte die Applikation (den Server) in einer DOS Box
2.) Ich führe die selbe Applikation wie gehabt über den Webserver/Interpreter aus
Irgendwie komisch. Mir fehlt hier noch das große Bild. Wobei ich ein solches tatsächlich in den ganzen Dokumentationen vermisse. Wäre hier wirklich hilfreich.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
WSGI ist einfach nur eine genormte Schnittstelle für die Kommunikation zwischen einem Python-Script und einem Webserver. Was fehlt Dir an diesem "Bild"?hendrikS hat geschrieben: Irgendwie komisch. Mir fehlt hier noch das große Bild. Wobei ich ein solches tatsächlich in den ganzen Dokumentationen vermisse. Wäre hier wirklich hilfreich.
Es gibt für die schnelle und einfache Entwicklung eben einen einfachen WSGI-kompatiblen Server, der von Python mitgeliefert wird. Man kann also Webanwednungen entwicklen, ohne eine persistente Webserverumgebung nutzen zu müssen (wie eben Apache und Konsorten!).
Diesen simplen Server hast Du vermutlich genutzt.
Man kann aber eben WSGI-Programme mit so ziemlich jedem Webserver verwenden. Das kann eben auch u.a. über die traditionelle CGI-Schnittstelle geschehen oder über spezielle Lösungen wie etwa mod_wsgi für den Apachen.
Was muss wer, wo, wann ausführen damit es geht.Hyperion hat geschrieben: WSGI ist einfach nur eine genormte Schnittstelle für die Kommunikation zwischen einem Python-Script und einem Webserver. Was fehlt Dir an diesem "Bild"?
Bei einem normalen CGI Skript funktionert es doch so: Der Webserver erkennt ein py script und startet den Python Interpreter um dieses auszuführen. Eigentlich ein einfaches Konzept.
Bei WSGI sind hier irgendwie mehr Schritte notwendig.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Jein, es wird halt ggf. ein Wrapper aufgerufen, der das WSGI-Script an die Webserverschnittstelle bindet. Mit mod_wsgi braucht man so einen Wrapper nicht mehr.
Kommt jetzt drauf an, wie Du "Schritt" definierst. Man könnte es glaub ich so sagen: Es kommt ein Schritt hinzu, von dem Du nichts merkst.
Kommt jetzt drauf an, wie Du "Schritt" definierst. Man könnte es glaub ich so sagen: Es kommt ein Schritt hinzu, von dem Du nichts merkst.
Hmm: "Jein" und "ggf." hilft mir natürlich wenig.
Also um die Hello World Applikation zum Laufen zu bringen, muß ich ein und dieselbe Applikation zweimal starten. Einmal in der Konsole und einmal wie gehabt. Ist erstmal mindestens ein Schritt mehr. Ist das der Normalfall?
Also um die Hello World Applikation zum Laufen zu bringen, muß ich ein und dieselbe Applikation zweimal starten. Einmal in der Konsole und einmal wie gehabt. Ist erstmal mindestens ein Schritt mehr. Ist das der Normalfall?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dann lies eben im Web alles nach und filtere die Infos selberhendrikS hat geschrieben:Hmm: "Jein" und "ggf." hilft mir natürlich wenig.

Nein! Der Webserver ruft ein Script auf und fertig. Entweder ist es die Hello World Applikation direkt oder ein Wrapper-Script, welches intern dann auf eine gewisse Art und Weise Deine Applikation aufruft.Also um die Hello World Applikation zum Laufen zu bringen, muß ich ein und dieselbe Applikation zweimal starten. Einmal in der Konsole und einmal wie gehabt. Ist erstmal mindestens ein Schritt mehr. Ist das der Normalfall?
Wie ich schon sagte: Vom Automatismus her ändert sich quasi nichts!
Und noch einmal zu dieser "Konsolen"-Sache: Du startest da einfach den mitgelieferten minimalen Server vom Python WSGI Modul. Das ist eben ein einfacher, sehr simpler Webserver. Dieser ist eben vor allem für die Entwcklung gedacht und nicht für den produktiven Betrieb später.
Vorteil: Du musst Deine Applikation nicht nach jeder kleinen Änderung deployen (also die aktualsierten Dateien in ein bestimmtes Verzeichnis kopieren, auf das der webserver zugrreifen kann!)
Ja und hier ist die eigentliche Lücke. Also ich nutze zur Entwicklung und Test einen Webserver (Xitami). Für diese Zwecke super geeignet.
Nur dieses WSGI Hello World will eben nicht. Und es mueste es ja nach Deiner Aussage auch ohne das ich die Applikation in der Konsole starte.
Nur dieses WSGI Hello World will eben nicht. Und es mueste es ja nach Deiner Aussage auch ohne das ich die Applikation in der Konsole starte.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Kenne ich nicht, daher kann ich dazu nichts sagenhendrikS hat geschrieben:Ja und hier ist die eigentliche Lücke. Also ich nutze zur Entwicklung und Test einen Webserver (Xitami). Für diese Zwecke super geeignet.

Du wirfst hier zig Sachen durcheinander! Was ist "die Applikation"? Wie sieht Dein "Hallo Welt" Script aus?Nur dieses WSGI Hello World will eben nicht. Und es mueste es ja nach Deiner Aussage auch ohne das ich die Applikation in der Konsole starte.
Ich nehme an, dass Du bisher immer CGI als Gateway von Xitami aus genutzt hast?
Dann musst Du eben Deine WSGI-Applikation mit einem geeigneten Handler wrappen. Diesen kannst Du als kleines eigenständiges Mini-Script erstellen. Dieses lässt Du dann vom webserver aus aufrufen.
[wiki]WSGI[/wiki]
Da findest Du ein Bsp dazu.