Python cgi-skript auf 1&1

Hallo,
habe ein kleines Skript - ein Nachrichtenformular - geschrieben, das ich bei 1&1 hochgeladen habe. Leider läuft das Skript nicht („Internal Server Error (HTTP 500)“ )
Im Einzelnen:
In einem HTML-Formular gibt der User eine Nachricht, emailadresse u.a. ein mit der GET-Methoe werden die Daten abgeschickt und sollten mit dem CGI-Skript, das in Python geschrieben ist ausgwertet werden. Hab schon viele Variationen des CGI-Skriptes versucht und die 1&1-Hilfe bemüht aber es gibt immer nur den o.g. Fehler? Für jegliche Hilfe w#äre ich dankbar.

Hallo tomtom,
Hier mal der korrekte Aufbau eines CGI-Scripts in Python:

  1. Zeile: Link zum Interpreter ( in der Regel #!/usr/bin/python unter Unix)
    Wenn du keine Headerinformationen senden willst folgt eine Zeile, die nur „print“ enthält.

Ein weiterer Punkt ist, dass ein Script ausführbar sein muss (Unix: chmod 777). Dieser Punkt ist allerdings nur relevant, wenn du einen Server gemietet hast, oder mit ftp auf deinen Webspace zugreifst.

Sollten die beiden og. Punkte nicht helfen, wären ein paar mehr Informationen hilfreich:
Hast du einen Webspace gemietet, oder einen Server?
Wie greifst Du auf deinen Webspace/Server zu?
Funkioniert ein einfaches Script, dass einen Text ausgibt, oder kommt der gleiche Fehler?
Könntest Du evtl. den Quelltext des Scripts veröffentlichen?

Hallo!
Welche Fehlermeldung kommt denn? Im Error Log des Webservers sollte die Fehlermeldung von Python, ggf. mit Traceback, stehen.

Hi Tomtom,

habe ein kleines Skript - ein Nachrichtenformular -
geschrieben, das ich bei 1&1 hochgeladen habe. Leider läuft
das Skript nicht („Internal Server Error (HTTP 500)“ )

ein allgemeiner interner Serverfehler? Kann erstmal alles sein, ich schätze ein Syntax-Fehler im Skript? Was sagen denn die Server-Logs?

Im Einzelnen:
In einem HTML-Formular gibt der User eine Nachricht,
emailadresse u.a. ein mit der GET-Methoe werden die Daten
abgeschickt und sollten mit dem CGI-Skript, das in Python
geschrieben ist ausgwertet werden. Hab schon viele Variationen
des CGI-Skriptes versucht und die 1&1-Hilfe bemüht aber es
gibt immer nur den o.g. Fehler?

Wie sieht denn die Serverarchitektur aus? Mit 1&1 kenne ich mich nicht (mehr) so aus, ich bin vor 5 Jahren von denen weg. Nutzt Du einen Apache Server, nginx, rocket oder andere? Wie wird das CGI-Skript angesteuert (mod_wsgi, mod_python)?

Kannst Du das Skript selbst mit Python ausführen? Wenn ja, läuft es mit einem lokalen Webserver?

Tut mir leid, ich fahre jetzt in Urlaub und werde voraussichtlich erst am Sonntag wieder zurück sein. Dazuwischen weiß ich noch nicht, wann ich ins Internet komme.

Viel Erfolg, Gruß
Michael

Mit so wenigen Angaben ist es natürlich schwierig zu sagen woran es liegt, daher mal ein paar Vorschläge:

  • Sind die Rechte in Ordnung? (Das Skript muss für den Webserverprozess ausführbar sein)

  • Ist die Dateiendung in Ordnung? (Damit der Server weiss was er damit anstellen muss)

  • Ist ein shebang am anfang des Skriptes, damit der Server weiss womit er das skript ausführen muss (#!/usr/bin/python als erste Zeile bzw eben der der Ort an dem Python liegt. Wenn man shell zugriff hat, kann man den pfad mit „whereis python“ rauskriegen)

  • Gibt das Skript den Content Typ als erstes aus? (zB print „Content-Type: text/html\n\n“ )
    Siehe auch: http://faq.1and1.com/scripting_languages_supported/c…

Grüsse
Stefan Thom

Hallo und vielen Dank für die schnelle Antwort.

Also noch ein paar Details:

Ich habe Webspace bei 1&1 gemietet
Das Skript, mit dem ich’s versucht habe stammt aus einem Python-Buch
Ich hab’s so gemacht wie mit meinem PHP-Skript (auch ein Kontaktformular) – beide Dateien einfach auf den Server hochgeladen und es hat prompt funktioniert:
Also hier mal die beiden Skripte.

Die cgi-Datei (1006.cgi)

#!/usr/bin/python

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("")
print("")

print(" Registrierte Daten:")
print(" Nachname:", nn, " „)
print(“ Vorname:", vn, " ")

print("")
print("")

… und hier die HTML-Datei (1006.html)

Bitte senden Sie Ihre Daten:

Nachname
Vorname

Was ich nicht ganz verstehe ist die Frage:
„Ein weiterer Punkt ist, dass ein Script ausführbar sein muss (Unix: chmod 777). Dieser Punkt ist allerdings nur relevant, wenn du einen Server gemietet hast, oder mit ftp auf deinen Webspace zugreifst.
Sind die Rechte in Ordnung? (Das Skript muss für den Webserverprozess ausführbar sein)“
Wie kann ich bei 1&1 meine Rechte verwalten?

… du siehst, ich bin noch ziemlich neu auf dem Gebiet

Für weitere Antworten schon im Voraus vielen Dank.

Tom

Hallo Tom,

Die beiden Dateien sehen an sich schon mal richtig aus. Aus der 1006.html schließe ich, dass die Datei 1006.cgi im Verzeichnis cgi-bin liegt, oder?
Laut 1&1-Hilfe muss ein Python-Skript allerdings im Ordner „python“ sein. Und dieser Ordner muss wiederum im Wurzelverzeichnis deines Webspaces sein. Verschieb die Datei mal dahin und ändere den Pfad dementsprechend im html-Formular ab.

Cgi unterscheidet sich etwas von PHP. Cgi-Skripte können nur in bestimmten Ordnern ausgeführt werden. Bei 1&1 ist das deine-domain.de/python.

Was ich nicht ganz verstehe ist die Frage:
„Ein weiterer Punkt ist, dass ein Script ausführbar sein muss
(Unix: chmod 777). Dieser Punkt ist allerdings nur relevant,
wenn du einen Server gemietet hast, oder mit ftp auf deinen
Webspace zugreifst.
Sind die Rechte in Ordnung? (Das Skript muss für den
Webserverprozess ausführbar sein)“
Wie kann ich bei 1&1 meine Rechte verwalten?

Dieser Absatz ist nur dann relevant, wenn man einen Server gemietet hat, oder seine Dateien mit einem FTP-Client hoch lädt.
Wenn du zum Hochladen deinen Browser verwendest, dann werden die Rechte automatisch richtig gesetzt. Um das Thema Zugriffsrechte brauchst Du dich dann also gar nicht kümmern.
Grüße

Hallo tomtom,

erzähl doch erst mal was du für ein Produkt von 1und1 hast. Ich vermute mal einen V-Server oder?
Ist python über cgi korrekt eingerichtet bzw. hast du schon mal irgend ein anders script zum Laufen bekommen.

Grüße,
Thomas

Also ich hab mal in die log-Datei gekuckt (da steht wahnsinnig viel drin :frowning: ) - aber eins macht mich stutzig:

„CWD /python“ 250 -
188.107.234.248 UNKNOWN u62468231 [30/Aug/2012:11:21:37 +0200] „TYPE A“ 200 -
188.107.234.248 UNKNOWN u62468231

Das hört sich für mich so an, als könnte er meine zugangsdaten u… gar nicht verarbeiten…
Ich hab jetzt mal bei 1&1 nachgefragt, ob ich überhaupt die Berechtigung habe so ein python-skript auszuführen.
mal sehen was kommt… oder könnt Ihr Euch da was zusammen reimen?

Hallo!
Welche Fehlermeldung kommt denn? Im Error Log des Webservers
sollte die Fehlermeldung von Python, ggf. mit Traceback,
stehen.

Hallo,

habe ein kleines Skript - ein Nachrichtenformular -
geschrieben, das ich bei 1&1 hochgeladen habe. Leider läuft
das Skript nicht („Internal Server Error (HTTP 500)“ )
[…]
es gibt immer nur den o.g. Fehler? Für jegliche Hilfe wäre ich
dankbar.

Leider kenne ich die Konfiguration des 1&1-Servers nicht, und auch die die Details des Python-Skript sind mir unbekannt. Da bleiben nur die üblichen Tipps:

  • auf eigenem Rechner testen
  • Logfiles des Webservers untersuchen
  • Logging der Verarbeitungsschritte

Viel Erfolg, Matthias