Premature end of script headers

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
helmut25
User
Beiträge: 15
Registriert: Sonntag 31. Januar 2016, 19:50

Hallo,
habe mir eine kleine python-web-anwendung mit mehreren Modulen zusammengebastelt,
die auch bis gestern einwandfrei funktioniert hat.
Ohne dass ich irgendwelche nennenswerte Änderungen gemacht habe, bekomme ich auf
einmal ständig oben genannte Fehlermeldung.
Habe mir dann mal aus einem python-wiki folgendes test-script kopiert:
{{{#!python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Debugging f. CGI-Skripte 'einschalten'
import cgitb
cgitb.enable()

print "Content-Type: text/html;charset=utf-8\n"
print "Hello World!"
}}}
...aber auch damit kommt der Fehler(steht in der log-datei, im Browser kommt 'internal server error').
Die Scripte sind natürlich alle ausführbar.
Wer weiss Rat?
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@helmut25: was steht denn genau im error-Log und was passiert, wenn Du das Skript auf der Konsole ausführst?
helmut25
User
Beiträge: 15
Registriert: Sonntag 31. Januar 2016, 19:50

Sirius3 hat geschrieben:@helmut25: was steht denn genau im error-Log und was passiert, wenn Du das Skript auf der Konsole ausführst?
Im error-Log steht nur die Fehlermeldung "Premature end of script headers"
Wenn ich das obige test-script auf der console ausführe kommt seltsamerweise ein Syntaxfehler (spalte 6) bei

import cgitb

irgendwie seltsam :roll:
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Diese geschweiften Klammern sind ja auch kein gültiges Python und führen somit zu einer Fehlermeldung. Solche Konstrukte werden üblicherweise von einer Template-Engine interpretiert und erst dann an den Python-Interpreter übergeben. Ohne diesen Zwischenschritt ist der Code wie gesagt nicht ausführbar.

Was mich wundert, ist das doppelte Shebang. Einmal `#!python` und einmal `#!/usr/bin/env python`. Ich empfehle die zweite Angabe. Die erste Angabe kann man IMHO löschen.
helmut25
User
Beiträge: 15
Registriert: Sonntag 31. Januar 2016, 19:50

snafu hat geschrieben:Diese geschweiften Klammern sind ja auch kein gültiges Python und führen somit zu einer Fehlermeldung. Solche Konstrukte werden üblicherweise von einer Template-Engine interpretiert und erst dann an den Python-Interpreter übergeben. Ohne diesen Zwischenschritt ist der Code wie gesagt nicht ausführbar.

Was mich wundert, ist das doppelte Shebang. Einmal `#!python` und einmal `#!/usr/bin/env python`. Ich empfehle die zweite Angabe. Die erste Angabe kann man IMHO löschen.
Habe jetzt mal die geschweiften Klammern und das `#!python` rausgehauen, und jetzt funzt DIESES Test-Script.
Bei meinen anderen Scripts hatte ich natürlich keine geschweiften Klammern und das korrekte

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
...und trotzdem tritt der genannte Fehler "premature end..." Fehler auf. Syntax-Check auf console dagegen meldet keinen Fehler!
BlackJack

@snafu: Das ist keine Template-Engine sondern MoinMoin-Wikisyntax für Code. Die geschweiften Klammern fassen den Code ein und das '#!python' wählt aus welcher Syntaxhighlighter verwendet werden soll. Also nicht löschen (im Wiki) wenn man nicht wirklich einfarbigen Quelltext haben möchte. :-) Wir erleben hier ja im Moment gerade ”live” wie schlecht das lesbar ist. :-(

@helmut25: Und was steht im Error-Log vom Webserver? Da sollte eigentlich der Grund ersichtlich sein, sonst hat man den Webserver etwas zu ”sparsam” konfiguriert.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@helmut25: und wie ist die Ausgabe auf der Konsole? Sieht der Header korrekt aus?
helmut25
User
Beiträge: 15
Registriert: Sonntag 31. Januar 2016, 19:50

BlackJack hat geschrieben:@snafu: Das ist keine Template-Engine sondern MoinMoin-Wikisyntax für Code. Die geschweiften Klammern fassen den Code ein und das '#!python' wählt aus welcher Syntaxhighlighter verwendet werden soll. Also nicht löschen (im Wiki) wenn man nicht wirklich einfarbigen Quelltext haben möchte. :-) Wir erleben hier ja im Moment gerade ”live” wie schlecht das lesbar ist. :-(

@helmut25: Und was steht im Error-Log vom Webserver? Da sollte eigentlich der Grund ersichtlich sein, sonst hat man den Webserver etwas zu ”sparsam” konfiguriert.
Wie schon gesagt: nur die Fehlermeldung vom Betreff plus scriptname.
helmut25
User
Beiträge: 15
Registriert: Sonntag 31. Januar 2016, 19:50

Sirius3 hat geschrieben:@helmut25: und wie ist die Ausgabe auf der Konsole? Sieht der Header korrekt aus?
Auf konsole (local) kann ich das script nicht laufen lassen, da Module importiert werden, die nur auf dem Server sind.
Jedenfalls wenn ich das korrigierte Wiki-Testscript vom Browser aufrufe kommt auch der *premature end...* Fehler.
BlackJack

@helmut25: Dann ist der Webserver nicht richtig konfiguriert. Da sollte eigentlich auch der Traceback landen, sonst hat man ja kaum eine Chance herauszufinden warum es nicht geklappt hat. Und wenn selbst das Testskript nicht klappt, dann muss da wohl grundlegend etwas nicht stimmen.

Ist der Quelltext in der am Anfang angegebenen Kodierung gespeichert? Stimmt die Art der Zeilenenden zum System? Ein Windows-Zeilenende in der ersten Zeile führt unter Linux/Unix gerne mal dazu das der Interpreter nicht gefunden wird, weil das Wagenrücklaufzeichen als Teil des Namens gesehen wird und ein 'python\r' gibt's natürlich nicht.

Wenn die Module lokal nicht installiert sind, dann lass es doch auf dem Server mal manuell laufen und schau was ausgegeben wird.
helmut25
User
Beiträge: 15
Registriert: Sonntag 31. Januar 2016, 19:50

BlackJack hat geschrieben:@helmut25: Dann ist der Webserver nicht richtig konfiguriert. Da sollte eigentlich auch der Traceback landen, sonst hat man ja kaum eine Chance herauszufinden warum es nicht geklappt hat. Und wenn selbst das Testskript nicht klappt, dann muss da wohl grundlegend etwas nicht stimmen.
Na ja, ist ja nicht mein eigener Server, sondern vom Inet-Provider. Habe schon eine Email an den Support geschrieben und gefragt,
ob irgendwelche System-Änderungen vorgenommen wurden.
BlackJack hat geschrieben: Ist der Quelltext in der am Anfang angegebenen Kodierung gespeichert? Stimmt die Art der Zeilenenden zum System? Ein Windows-Zeilenende in der ersten Zeile führt unter Linux/Unix gerne mal dazu das der Interpreter nicht gefunden wird, weil das Wagenrücklaufzeichen als Teil des Namens gesehen wird und ein 'python\r' gibt's natürlich nicht.
Das sollte alles kein Problem sein, Zeilenvorschub wird vom FTP linuxmässig angepasst.
Hab ja zwei Wochen lang problemlos damit arbeiten können.
BlackJack hat geschrieben: Wenn die Module lokal nicht installiert sind, dann lass es doch auf dem Server mal manuell laufen und schau was ausgegeben wird.
Meinst Du mit *manuell* per console? Das geht bei dem Provider leider nicht. Bei Aufruf im Browser kommt der erwähnte Fehler...
Antworten