Hallo Philipp
Dank dir erstmal für Deine Reaktion...
Zu Deinen Fragen:
Wie rufst du das Shell-Programm auf? - popen, system, Backticks, IPC::open2, IPC::open3,
Das funktioniert bei mir zum Teil mit open(DATEI,"soundso.pl |");
Dazu ist zu sagen, dass das Programm parametisiert ist und einige Funktionen duchaus so ihre Werte zurückgeben, zum Beispiel Textdateien, aber auch laufende Prozesse, die ich durch "refresh" aktuell halte.
wenn der gestartete Prozess nicht "detached" gestartet wird, wartet das Hauptprogramm
auf das Enden jenes. Es sei denn das Shell-Programm merkt, dass es nicht unter der
Konsole arbeitet.
Was heisst in diesem Zusammenhang "detached"?
Wenn ich das Perl-Skript von der Kommandozeile unter Unix starte, "wartet" das Skript auf die Ausgabe der Funktion und gibt die Daten aus.
So tut es auch, wenn es über den Webserver gestartet wird, das von dir beschriebene
Phänomen hat (wahrscheinlich) nicht's damit zu tun.
Das nehme ich auch an...
Rufe ich das Skript jedoch von einer HTML-Seite mittels Button auf, schickt das Perl-Skript zwar eine HTML-Seite zurück, aber leider ohne die Daten des Shell Programms...
Was für eine HTML-Seite? - Ist sie mit Daten gefüllt? - Verwendest du IE (der erstellt
nämlich ein HTML-Dokument, obwohl gar keines empfangen wurde)? - Wie sieht die HTML-Seite
aus (ist sie mit von dir gewolltem Inhalt bestückt, oder leer)? - Wird Browser-Timeout
erreicht? - Wie empfängst du die Daten des Shell-Programmes? - Wenn gar nicht, dann wäre
es möglich, dass die Ausgabe des Shellprogrammes an STDERR gesendet wird[1] und somit von
vom Webserver ggf. nicht an den Client gesendet wird (beachte auch, dass die Ausgabe von
STDOUT gecached ist, jene von STDERR nicht und somit zu Fehlern führen kann, da der
Webserver keinen kompletten HTTP-Header erhält). Hast du einen gültigen HTTP-Header
gesendet? - Stehen Fehlermeldungen in dem log deines Webservers?
Die html-Seite, die ich zurück bekomme beinhaltet im Grunde alles, was ich im Perl-Skript angegeben habe. Die html-Seite soll die Ausgabe des Programms im Grunde wie auf der Konsole darstellen, nur eben grafisch ansprechender usw.
Wie gesagt, zum Teil geschieht dies schon, teilweise bekomme ich genau das, was ich will, nur eben nicht bei allen "Unterprogrammen"...
In der error-log Datei steht übrigens nichts, einen Server-Timeout bekomme ich auch nicht, HTTP-Header ist auch vorhanden...
Möglicherweise liegt das Problem gar nicht so sehr bei meinen Skripts, sondern vielmehr an der Arbeitsweise des Shell-Programms. Dennoch ist es eigenartig, dass auf der Konsole alles ausgegeben wird, im Browser aber eben nicht...
Ich hoffe, ich konnte es ein wenig verständlich machen...
Grüße Peter