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.
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

python-Skript auf Webserver aufrufen

Beitragvon Reksio » Samstag 20. Mai 2006, 08:29

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: python-Skript auf Webserver aufrufen (CGI)

Beitragvon gerold » Samstag 20. Mai 2006, 08:56

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=] Options ExecCGI
SetHandler cgi-script
AddHandler cgi-script .py[/code]
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:

Beitragvon Reksio » Samstag 20. Mai 2006, 10:39

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 20. Mai 2006, 11:04

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 Modvoice
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

Beitragvon Reksio » Samstag 20. Mai 2006, 15:28

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 20. Mai 2006, 16:05

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 20. Mai 2006, 16:30

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 :(

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

Beitragvon Reksio » Donnerstag 15. Juni 2006, 16:52

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 15. Juni 2006, 16:55

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...

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

Beitragvon Reksio » Freitag 16. Juni 2006, 08:56

Ä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? :?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 17. Juni 2006, 13:30

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 Modvoice
Reksio
User
Beiträge: 7
Registriert: Samstag 20. Mai 2006, 07:34
Kontaktdaten:

Beitragvon Reksio » Montag 19. Juni 2006, 17:34

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 19. Juni 2006, 18:16

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

Beitragvon gerold » Montag 19. Juni 2006, 19:15

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 19. Juni 2006, 19:17

http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder