Guest MichaelDanke für deine ausführliche Antwort. Ich verstehe aber leider nur Bahnhof. Schade, das man STDERR nicht so einfach abfangen kann, wenn man SYSTEM verwendet mit einem &.
Vielleicht müssen wir einen Schritt zurückgehen und klären, was Du eigentlich erreichen willst.
In Deinem Originalbeispiel startest Du Dein Python-Skript und wertest dann den Status und die Fehlereinträge aus. Klar ist, dass diese Auswertung erst dann erfolgen kann, wenn das Python-Skript beendet ist, und mit dem synchronen
system-Aufruf passiert das auch.
Nun soll Dein Perl-Skript nach dem Start des Python-Skripts weiter verarbeitet werden. Dafür gibt es in Perl
fork. Wie man das genau ausgestaltet, hängt aber davon ab, was Dein Perl-Skript tun soll, nachdem es das Python-Skript gestartet hat.
Das Perl-Skript kann
nicht sofort $ret abfragen: Auf
$ret musst Du
warten. Wenn Deine einzige Nutzung von
$ret darin besteht, Erroreinträge in ein Logfile zu schreiben, dann kann das auch der "Kind"-Prozess des
fork erledigen, der wie in Deinem Beispiel mit
system arbeiten kann. Das eigentliche Perl-Skript läuft parallel zum Python-Prozess und Du kannst das Resultat einsammeln, wenn das Skript sonst nix mehr zu tun hat (mit
wait oder
waitpid), musst das aber nicht zwingend tun.
Die STDERR-Frage ist wirklich trivial, wenn Du Dir über den Ablauf der parallelen Prozesse klar geworden bist. Denn auch beim
& läuft der Prozess parallel zum Perl-Skript und STDERR gibt's nicht sofort.