Thomas Güttler guettliml@thomas-guettler.de (Fr 30 Aug 2019 17:42:59 CEST):
Ich bin froh so die Ursache des Fehlers gefunden zu haben. Hier der Code: https://github.com/guettli/wrap_and_log_calls
Ich verstehe nicht viel von Py, aber es sieht mir so aus, als wenn Du erst die Daten sammelst und dann ins Log schreibst. Ist das gut? Warum nicht in der While True Schleife nach dem select gleich ins Log schreiben, was Du gelesen hast?
Oder noch besser, stdout und stderr das Prozesses auf den fd des Logfiles legen und dann exec des gewünschten Kommandos.
Analog zu
#!/bin/sh exec "$@" 1>logfile 2>&1
oder gleich so wie diese zwei Zeilen. Was habe ich verpasst, das Dein Script mehr macht (ausser, daß er noch Blümchen dran malt mit Datum und so und in der Ausgabe trennt nach stderr und stdout. Letzteres Feature hättest Du auf der Konsole auch nicht, wenn beide Datenströme direkt dorthin gehen.)
Da geht vielleicht das hier:
#!/bin/bash exec 3>/tmp/log exec "$@" 1> >(sed -u 's/^/out: /' >&3) 2> >(sed -u 's/^/err: /' >&3)
Man kann auch noch den FD 3 einsparen.
-- Heiko