Thread Python Skript Aufruf Asynchronous
(9 answers)
Opened by Michael at 2022-01-06 18:04
Zunächst mal zu den Symptomen, die Du siehst: perlfunc system ist ein synchroner Aufruf in einem separaten Prozess, und so wie Du das benutzt, brauchst Du das auch: Denn erst, wenn dieser Prozess beendet ist, kannst Du $ret abfragen. Mit dem & schickt der Prozess, den Du mit system erzeugst, den Python-Aufruf in den Hintergrund, dadurch geht dessen STDERR verloren.
Die möglichen Lösungen haben ja die hlubenow und bianca schon beschrieben: IPC::Run und das sehr ähnliche Core-Modul IPC::Open3 helfen beim Einfangen von STDERR, sind aber beide nicht wirklich asynchron. Wenn es nur darum geht, Ausgaben des Python-Programms abzufangen, dann ist Capture::Tiny leichter zu bedienen. "Asynchron" der schwierigere Teil des Problems. Dafür ist perlfunc fork die Basisfunktion, braucht aber etwas Buchführung für die Verwaltung des Prozesses. CPAN-Module wie Any::Event machen das "komfortabler". Das ändert aber nichts daran, dass Du überlegen musst, ob, wann und wie das Perl-Programm auf das Resultat des Python-Programms reagieren soll. Wenn es ausreicht, das Ergebnis "irgendwann" im Logfile zu haben, dann ist auch Proc::Daemon eine Alternative. |