Thread Python Skript Aufruf Asynchronous (9 answers)
Opened by Michael at 2022-01-06 18:04

haj
 2022-01-07 16:15
#194145 #194145
User since
2015-01-07
527 Artikel
BenutzerIn

user image
Zunächst mal zu den Symptomen, die Du siehst: Perldoc: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:

CPAN:IPC::Run und das sehr ähnliche Core-Modul Perldoc: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 CPAN:Capture::Tiny leichter zu bedienen.

"Asynchron" der schwierigere Teil des Problems. Dafür ist Perldoc:perlfunc fork die Basisfunktion, braucht aber etwas Buchführung für die Verwaltung des Prozesses. CPAN-Module wie CPAN: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 CPAN:Proc::Daemon eine Alternative.

View full thread Python Skript Aufruf Asynchronous