python-Skript auf Webserver aufrufen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

Hi,

habe einen Webserver gehostet. Dieser ist mit folgenden Modulen kompiliert:

python-2.4
python-crypto-2.0
python-demo-2.4
python-devel-2.4
python-doc-2.4
python-fcgi-2000.09.21
python-mysql-1.2.0
python-numeric-23.7
python-openssl-0.6
python-tk-2.4
python-xml-2.4


Zusätzlich ist folgendes in der Config:

AddHandler python-program .py
PythonHandler mod_python.publisher

Kann mir jemand sagen, wie ich ein Pythonscript auf dem Account aufrufe?
Habe z.B. ein kleines Skript in einer Datei im cgi-bin Ordner:

#!/usr/bin/python

for i in range (10):
print i
print "zähle noch"

Doch weiss ich nicht, wie es aufgerufen wird.
Mit domain/cgi-bin/test.py
funktioniert nicht.
Ein Aufruf unter domain/test.py genauso nicht.
Wenn ich das Skript in den Ordner lege, wo ich PHP-Skripts abarbeite, bekomme ich eine 404-Fehlerseite.

Kennt sich da jemand aus, wie das funktionieren kann???


Axel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Reksio hat geschrieben:Kann mir jemand sagen, wie ich ein Pythonscript auf dem Account aufrufe? Habe z.B. ein kleines Skript in einer Datei im cgi-bin Ordner
Hi Axel!

Zuerst die schlechte Nachricht: **mod_python** hat nichts damit zu tun, dass CGI-Skripte ausgeführt werden können.

Und jetzt die gute Nachricht: **mod_python** hat nichts damit zu tun, dass CGI-Skripte ausgeführt werden können. :D

Hier ein paar Links für dich:
http://www.python-forum.de/post-27484.html#27484
http://www.python.org/doc/current/lib/module-cgi.html
http://www.python-forum.de/post-33356.html#33356

Damit der Apache auch Python-Dateien als CGI-Skript interpretiert, muss dem Apachen gesagt werden, dass er das tun soll.
Dafür sind folgende Zeilen zuständig:

Code: Alles auswählen

    Options ExecCGI
    SetHandler cgi-script
    AddHandler cgi-script .py
Hier noch ein Link zu einem Beitrag, aus dem hervorgehen sollte, wie man diese Konfigurationsanweisungen einsetzen kann.
http://www.python-forum.de/post-34080.html#34080

Diese Einstellungen kannst du meistens auch als .htaccess-Datei setzen.

Dann muss dem CGI-Skript unbedingt im Kopf der Pfad zum Python-Interpreter mitgegeben werden. Das Coding, in dem das Skript gespeichert wurde, wäre auch nicht schlecht.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
Damit das Skript ausgeführt werden kann, muss es als **ausführbar** gekennzeichnet werden. Zum Testen würde ich die Zugriffsrechte "777" zuweisen und wenn alles funktioniert, auf das Nötigste reduzieren. Das kann jeder gute FTP-Client. (unter Windows z.B. Filezilla http://filezilla.sourceforge.net/)

Zusammenfassung:
- mod_python ist uninteressant
- Apache konfigurieren (z.B. in .htaccess-Datei)
- Skript in CGI-Ordner
- Pfad zu Python als erste Zeile des Skripts
- Coding als zweite Zeile
- Skript muss als **ausführbar** gekennzeichnet sein

mfg
Gerold
:-)

PS: Die Hinweise auf Webframeworks kommen meist von anderen Teilnehmern in diesem Forum. Deshalb spare ich mir diese Aufzählung. :P
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

Wie ich verstanden habe, fehlt die Zeile Options ExecCGI. Sie ist zwingend notwendig.
Kann aber drin stehen, da ich diese Zeilen vom Provider bekommen habe. Werde ich noch nachfragen.

Habe den Pfad auf #!/usr/bin/env python geändert.
Als Skript - gesamtes Coding - habe ich nur erstmal:


for i in range (10):
print i
print "zähle noch"

Mir geht es doch nur, geht oder geht nicht. Statt print "Hallo World"

Kann ich dann die Python-Datei so aufrufen wie Perl mit domain/cgi-bin/test.py ?


Axel
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Reksio hat geschrieben:Mir geht es doch nur, geht oder geht nicht. Statt print "Hallo World"
Klar geht es, wenn du's richtig einrückst und es ausführbar ist. GGf. eben auch den error.log checken, was da für Fehler kommen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

Wie komme ich an error.log ran?
In der access_log im server_admin24 habe ich nur sowas:

...- - [20/May/2006:09:39:02 +0200] "GET /test.py HTTP/1.1" 404 1158 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3"

Soviel weiss ich auch ohne Nachschauen.

test1.py

Code: Alles auswählen

#!/usr/bin/python 
print "Test"

Hier brauche ich - denke ich - keine Einrückung. Perl funzt übrigens wunderbar. Pythondatei wird scheinbar nicht gefunden, obwohl die Datei im gleichen Ordner liegt.

Axel
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Reksio hat geschrieben:Wie komme ich an error.log ran?
Per SSH einloggen und mit find oder locate aufspüren. Zum Beispiel.
Reksio hat geschrieben:88.72.199.64 - - [20/May/2006:09:39:02 +0200] "GET /test.py HTTP/1.1" 404 1158 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3"

Soviel weiss ich auch ohne Nachschauen.
Das sagt doch schon ziemlich viel aus! Das besagt nämlich, dass es die Datei die du ausführen willst an der Stelle einfach nicht gibt.

Ein paar Tips meinerseits:

Nimm das Programm, benenne es in test.cgi um, mach es ausführbar (auch für den Webserveruser) und schiebs in den gleichen Pfad wie das Perl programm und rufs auch so auf wie das Perl-Programm:

Code: Alles auswählen

#!/usr/bin/env python

# Required header that tells the browser how to render the text.
print "Content-Type: text/plain\n\n"

# Print a simple message to the display window.
print "Test!\n"
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Eigentlich haben wir schon eine Wiki Seite dazu:

[wiki]Web-Skripte zum laufen bringen[/wiki]

Leonidas hat geschrieben:
Reksio hat geschrieben:Wie komme ich an error.log ran?
Per SSH einloggen und mit find oder locate aufspüren. Zum Beispiel.
Nicht immer hat man Zugriff auf die Log-Dateien von Apache! Ich hab bei Alturo WebSpace mit SSH Zugang und da kommt man leider nicht an die Logs :(

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

Habe in der Error log folgendes stehen:

Premature end of script headers

in der Conf steht, dass Scripte die Endung .py$
und das sie mit mod_python ausgeführt werden.

Habe folgendes Skript jetzt:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print "Content-type: text/html"
print ""

print "Test"

Mit Editor pspad im Format UTF-8 und Unix(LF) für den Zeilenumbruch abgespeichert. Kann aber nicht schauen, ob unter Linux trotzdem ein ^M drinsteht.

Perl-Scripte laufen dafür in dem Ordner problemlos.

Soll ich da über htaccess noch zusätze machen?

Bin noch nicht viel weitergekommen. :oops:
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das was du da als testskript hast ist aber kein mod_python, schätzte ich...

Benenn dein Skript mal nach *.cgi um und probiere es dann. Alternativ versuche es mit dem Eintrag AddHandler cgi-script .py in der .htaccess...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

Ändert beides nichts daran.
Habe die Datei umbenannt und bekomme gleichen Fehler. Dasselbe bei Einfügen einer Htaccess Datei mit der einen Zeile.
Habe ausserdem unter Knoppix die ^ entfernt über den Editor vom MC.

Hat jemand noch Ideen? :?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Reksio hat geschrieben:Hat jemand noch Ideen? :?
Wie wäars damit: deinstallier mod_python. Danach nimmst du dir ein cgi-bin-Ordner, setzt dort +ExecCGI, AddHandler cgi-script .cgi, benennst die date in hallowelt.cgi um, schaust dass die Zeilenenden stimmen, und rufst es im Browser auf.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

Dann sollen Python-Skripte funktionieren?
Leider bin ich nicht Admin und nicht der Einzigste auf dem Server.

Habe binär per FTP die Dateien hochgeladen. Zeilenumbrüche werden mir jetzt als LF angezeigt. Trotzdem immer noch gleicher Error.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Reksio hat geschrieben:Dann sollen Python-Skripte funktionieren?
Ich tippe mal auf ja, allerdings hab ichs nicht selbst getestet.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Reksio hat geschrieben:Premature end of script headers
Hi Reksio!

Falsche Zeilenumbrüche.

Teste deine Skripte mit http://www.python-forum.de/topic-6029.html

Es müssen alle Zeilen mit einem "LF" abgeschlossen sein.

Mit dem Programm "dos2unix" bekommst du die Zeilenumbrüche so hin wie du sie brauchst.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

Vielen Dank für Eure zahlreiche Hilfe.
Trotzdem bin ich noch nicht weiter. Die Zeilenumbrüche werden mir als LF im Editor angezeigt. Im Gegensatz zum Perl-Skript mit CR Umbrüchen, doch das läuft trotzdem.

Die Threads hatte ich schon gelesen. Hatte die Hinweise schon ausprobiert. Kann es vielleicht sein, dass die erste Zeile nicht hinhaut?

#!/usr/bin/env python

Muss bei mod_python der Pfad so angegeben werden. In der PHP-Info habe ich /usr/bin als Path gefunden, aber noch 3 andere Pfadangaben.
Wie bekomme ich raus, was da richtig ist?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Reksio hat geschrieben:Muss bei mod_python der Pfad so angegeben werden.
Nein, weil das was du meinst nicht mod_python sondern CGI ist. Denn du willst CGI, nicht mod_python, glaub mir.

Der Pfad sollte allerdings stimmen, du kannst noch versuchen die Zeilenenden auf CR zu setzen.

Die Fehlermeldung zeigt allerdings dass der Shebang einfach nicht stimmt, wenn /usr/bin/env nicht gefunden worden würde, wären die Fehlermeldungen anders.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten