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

haj
 2022-01-08 14:58
#194151 #194151
User since
2015-01-07
527 Artikel
BenutzerIn

user image
Guest Michael
Danke 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.

View full thread Python Skript Aufruf Asynchronous