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