From 4d2e3696db1f21504f36364f83c669c91b02227a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Thu, 18 Jul 2024 13:39:22 +0200
Subject: [PATCH] fix: Unblock child's stdout printing

This sets the subprocess to avoid blocking reads and we now can use
unlimited reads (i.e. larger-than-per-line chunks) and use those.
For subprocesses printing fast this should avoid any buffers to fill up.

Change-Id: If3f67b2aaf7431a4b7abb58e1b64e2a70ff05eb2
---
 bin/yashchiki | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/bin/yashchiki b/bin/yashchiki
index 63234d47..4626471c 100644
--- a/bin/yashchiki
+++ b/bin/yashchiki
@@ -193,14 +193,15 @@ def run(script: str, env: dict, script_args: list = []):
     out = subprocess.Popen(
         cmd, env=env, stdout=subprocess.PIPE,
         stderr=subprocess.STDOUT)
+    os.set_blocking(out.stdout.fileno(), False)
     while True:
-        line = out.stdout.readline()
-        if line:
+        data = out.stdout.read()
+        if data:
             if args.debug:
-                sys.stdout.buffer.write(line)
+                sys.stdout.buffer.write(data)
                 sys.stdout.flush()
-            stdout += line
-        else:
+            stdout += data
+        if out.poll() is not None:
             break
     out.wait()
     stdout = str(stdout, encoding="utf-8")
-- 
GitLab