Hi Heiko und andere,
Am 02.09.19 um 13:12 schrieb Heiko Schlittermann:
Dein Wrapper puffert - wenn ich es richtig gesehen habe - noch mehr als nur zeilenweise. Oder habe ich die Stelle verpasst, wo es nach dem Lesen aus dem Select sofort wieder auf den entsprechenden Kanal rausgeschrieben wird?
Der Aufrufer des Wrappers sieht keinen Unterschied. Die Zeichen kommen zeichenweise. Die Ausgabe für das Log-File wird gepuffert. Das ist für meinen Zweck voll ok.
„Mein“ Wrapper puffert zeilenweise, ja, weil sonst die Ausgabe mit den Präfixen durcheinander gerät.
Wenn Aufrufer sich auf den Fortschrittsbalken verlassen, sind sie arm. Das aufgerufene Programm könnte in Abwesenheit eines Terminals beschließen, gar keinen Balken zu malen.
Der Code des Aufrufer, der den Fortschrittsbalken liest ist nicht von mir, und lässt sich schwer ändern. Ist eben so.
Aber egal, wie Du es löst, Du solltest darauf verzichten, die erzeugte Ausgabe erst komplett in einem Dictionary zu speichern und anschließend auszugeben, es gibt keinen Grund dafür. Du kannst die gelesenen Daten sofort verarbeiten. Für die Ausgabe in das File könntest Du vielleicht kontrollieren, ob eine Zeile komplett ist und wenigstens so lange puffern, aber dann raus damit.
Ich habe meinen Anwendungsfall gelöst und da passt alles prima in den RAM. Aber ich habe deine Bedenken verstanden. Prinzipiell könnten auch mehrere Gigabytes über stdout raus gehen.
Manchmal denke ich mir, dass vieles deutlich einfacher wäre, wenn es nur stdout geben würde, und nicht noch stderr. Diese zwei Ströme machen es manchmal nervig.
Gruß, Thomas