Nur noch mal um das klarzustellen:
CGI = Common Gateway Interface
Das ist keine Programmiersprache, sondern eine Interface-Spezifikation wie ein Server die Daten eines Requests an ein dynamisches Programm weitergibt. CGI ist an keine Programmiersprache gebunden...
mod_python testen ob installiert ?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Seven!
Noch etwas:
In den Ordner, in dem die "AUSFÜHRBARE" Python-Datei liegt, musst du eine Datei mit dem Namen ".htaccess" (beachte den Punkt) erstellen. In diese Datei schreibst du
Damit wird dem Apachen gesagt, dass Dateien mit der Endung ".py", mit dem Python-Interpreter auszuführen sind. Schon werden in dem Ordner Python-Dateien als CGI-Dateien ausgeführt.
Wichtig:
1. Python-Dateien müssen als "Ausführbar" gekennzeichnet sein.
2. Der Apache muss auf die Datei zugreifen und diese ausführen können.
3. Dem Apachen muss gesagt werden, dass Dateien mit der Endung ".py" CGI-Skripte sind.
4. Die erste Zeile der Python-Datei müss dem Apachen zeigen, mit welchem Programm das Skript auszuführen ist.
lg
Gerold
Noch etwas:
In den Ordner, in dem die "AUSFÜHRBARE" Python-Datei liegt, musst du eine Datei mit dem Namen ".htaccess" (beachte den Punkt) erstellen. In diese Datei schreibst du
Code: Alles auswählen
Options +ExecCGI
AddHandler cgi-script .py
Wichtig:
1. Python-Dateien müssen als "Ausführbar" gekennzeichnet sein.
2. Der Apache muss auf die Datei zugreifen und diese ausführen können.
3. Dem Apachen muss gesagt werden, dass Dateien mit der Endung ".py" CGI-Skripte sind.
4. Die erste Zeile der Python-Datei müss dem Apachen zeigen, mit welchem Programm das Skript auszuführen ist.
lg
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.
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
Das ist ja schon mal eine wichtige und beruhigende Erkenntnis Leider bekomme ich noch nicht einmal dieses supersimple Test-CGI zum Laufen:modelnine hat geschrieben:...
CGI = Common Gateway Interface
Das ist keine Programmiersprache, sondern eine Interface-Spezifikation wie ein Server die Daten eines Requests an ein dynamisches Programm weitergibt. CGI ist an keine Programmiersprache gebunden...
Code: Alles auswählen
#!/usr/bin/python2.4
print "Content-type: text/html"
print
print "<html>"
print "<body>"
print "<h1>CGI Test</h1>"
print "</body>"
print "</html>"
Code: Alles auswählen
Object not found!
The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.
If you think this is a server error, please contact the webmaster.
Error 404
localhost
Tue Mar 21 08:51:22 2006
Apache/2.0.54 (Linux/SUSE)
Code: Alles auswählen
ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
# "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/srv/www/cgi-bin">
AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all
</Directory>
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Seven!snakeseven hat geschrieben: Es kommt folgende Fehlermeldung:In meiner 'default-server.conf' steht:Code: Alles auswählen
Object not found!
Code: Alles auswählen
<Directory "/srv/www/cgi-bin"> AllowOverride None Options +ExecCGI -Includes Order allow,deny Allow from all </Directory>
Vorab: Verwende nicht das CGI-BIN-Verzeichnis. Das ist durch die Einstellung AllowOverride None so eingeschränkt, dass du keine ".htaccess"-Datei verwenden kannst um die Einstellungen zu ergänzen oder zu überschreiben.
Das Einfachste wird sein, wenn du deine Tests in einem eigenen Ordner durchführst.
Welcher der Apache-Root-Ordner ist, findest du über die Konfigurationsdatei des Apachen raus. Suche nach "DocumentRoot". Das ist dann normalerweise der Ordner der Aufgerufen wird, wenn du im Browser "http://localhost/" eingibst.
Erstelle dir unterhalb des Apache-Root-Ordners einen neuen Ordner, in dem du dein Skript ausprobieren kannst. Nicht vergessen: ".htaccess"-Datei erstellen; Ausführbar; für Apache lesbar.
Wenn dein Skript im Unterordner "mein_testordner" liegt und "mein_testskript.py" heißt, dann sollte die URL http://localhost/mein_testordner/mein_testskript.py" greifen.
Ob es allerdings bei Suse erlaubt ist, ".htaccess"-Dateien zu verwenden, weiß ich nicht, da ich schon ein paar Jahre lang kein Suse mehr in der Hand hatte.
Folgendes sollte immer funktionieren:
Ändere deine "default-server.conf" so um, dass dieser Block so aussieht:
Code: Alles auswählen
<Directory "/srv/www/cgi-bin">
AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all
AddHandler cgi-script .py
</Directory>
http://localhost/cgi-bin/skriptname.py
lg
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.
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
Hi Gerold,
erstmal Danke für die schnelle Antwort !
Habe zunächst die einfachere (2.) Variante ausprobiert, aber leider ohne Erfolg. Fehlermeldung:
Die 'default-server.conf' habe ich vorher entsprechend geändert und den Server mit '/etc/init.d/apache2 restart' neu gestartet.
Das CGI-Modul wird korrekt in 'loadmodule.conf' geladen und ein Perl-Script in der cgi-bin wird auch korrekt ausgeführt. Wat nu ?
Gruss, Seven
P.S. Nochwas: bei meinen Python-Scripten musste ich die shebang auf '#!/usr/bin/env python' setzen, damit sie laufen. Jetzt lautet sie (oder der ?) '#!/usr/bin/python2.4'. Ich verstehe den Unterschied nicht ?
erstmal Danke für die schnelle Antwort !
Habe zunächst die einfachere (2.) Variante ausprobiert, aber leider ohne Erfolg. Fehlermeldung:
The server encountered an internal error and was unable to complete your request.
Error message:
Premature end of script headers: cgitest.py
Die 'default-server.conf' habe ich vorher entsprechend geändert und den Server mit '/etc/init.d/apache2 restart' neu gestartet.
Das CGI-Modul wird korrekt in 'loadmodule.conf' geladen und ein Perl-Script in der cgi-bin wird auch korrekt ausgeführt. Wat nu ?
Gruss, Seven
P.S. Nochwas: bei meinen Python-Scripten musste ich die shebang auf '#!/usr/bin/env python' setzen, damit sie laufen. Jetzt lautet sie (oder der ?) '#!/usr/bin/python2.4'. Ich verstehe den Unterschied nicht ?
Zuletzt geändert von snakeseven am Dienstag 21. März 2006, 11:29, insgesamt 1-mal geändert.
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
Also das sagt Folgendes:jens hat geschrieben:Guck dir mal die Apache-Error Log an.
-Sind die Zeilenenden richtig?
-Ist der Pfad zum Python Interpreter richtig?
Code: Alles auswählen
[Tue Mar 21 10:32:31 2006] [error] [client 127.0.0.1] (2)No such file or directory: exec of '/srv/www/cgi-bin/cgitest.py' failed
[Tue Mar 21 10:32:31 2006] [error] [client 127.0.0.1] Premature end of script headers: cgitest.py
Was meinst du mit Zeilenenden ?
Gruss, Seven
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Seven!snakeseven hat geschrieben:Error message:
Premature end of script headers: cgitest.py
Diese Meldung kenne ich. Die tritt auf, wenn du eine CGI-Datei im Windows erstellst und/oder mit einem Editor bearbeitest, der "\r\n" als Zeilenumbruch macht. Unix, Linux und Co. arbeiten aber mit "\n" als Zeilenumbruch.
Du musst nur die überflüssigen "\r" aus dem Skript entfernen -- dann sollte es funktionieren.
Siehe auch:
http://www.python-forum.de/viewtopic.php?p=26042#26042
http://www.python-forum.de/viewtopic.php?p=5334#5334
http://www.bastet.com/ (suche nach dos2unix)
lg
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.
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
Puhh, das wars !
Wie soll man auf sowas kommen, schließlich werden die Steuerzeichen nicht mit angezeigt !? Komisch war, das ein Löschen der Zeilenenden und Erzeugen eines neuen Zeilenumbruchs in Kate den Fehler nicht behoben hat. Ich habe das Ganze dann nochmal in Scite eingetippt und dann gings.
Also, Vielen Dank (!!) für eure Geduld und Hilfe. Ich hoffe, ich komme jetzt alleine weiter. Ansonsten muss ich euch wieder ein bischen nerven
Grüße, Seven
Wie soll man auf sowas kommen, schließlich werden die Steuerzeichen nicht mit angezeigt !? Komisch war, das ein Löschen der Zeilenenden und Erzeugen eines neuen Zeilenumbruchs in Kate den Fehler nicht behoben hat. Ich habe das Ganze dann nochmal in Scite eingetippt und dann gings.
Also, Vielen Dank (!!) für eure Geduld und Hilfe. Ich hoffe, ich komme jetzt alleine weiter. Ansonsten muss ich euch wieder ein bischen nerven
Grüße, Seven
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
In Scite geht das eh ganz einfach!
Anzeigen kannst du dir die Endungszeichen mit View / End Of Line
Ändern kannst du es so:
-Stell unter Options / Line Ending Characters auf LF um.
-dann Options / Convert Line Endings Characters
Anzeigen kannst du dir die Endungszeichen mit View / End Of Line
Ändern kannst du es so:
-Stell unter Options / Line Ending Characters auf LF um.
-dann Options / Convert Line Endings Characters
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Weil das Problem schon öfters aufgetaucht ist, hab ich mal eine Wiki-Seite gemacht:
http://wiki.python.de/Web-Skripte_zum_laufen_bringen
http://wiki.python.de/Web-Skripte_zum_laufen_bringen