From 8ba6ab7bff8558e336ed295ded66c2d25398139f Mon Sep 17 00:00:00 2001 From: S4Adam Date: Tue, 4 Jul 2023 07:37:30 +0000 Subject: [PATCH] Custom StderrRedirector class to forward stderr --- packages/python-runner/runner.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/python-runner/runner.py b/packages/python-runner/runner.py index a2c2a369f..b3ae136e1 100644 --- a/packages/python-runner/runner.py +++ b/packages/python-runner/runner.py @@ -24,6 +24,20 @@ def send_encoded_msg(stream, msg_code, data={}): stream.write(f'{message}\r\n'.encode()) +class StderrRedirector: + """A workaround class to write to both sys.stderr and the Instance stderr endpoint.""" + def __init__(self, stream): + self.stream = stream + + def write(self, message): + self.stream.write(message) + sys.__stderr__.write(message) + + def flush(self): + self.stream.flush() + sys.__stderr__.flush() + + class Runner: def __init__(self, instance_id, sequence_path, log_setup) -> None: self.instance_id = instance_id @@ -81,7 +95,7 @@ def is_incoming(channel): def connect_stdio(self): sys.stdout = codecs.getwriter('utf-8')(self.streams[CC.STDOUT]) - sys.stderr = codecs.getwriter('utf-8')(self.streams[CC.STDERR]) + sys.stderr = StderrRedirector(codecs.getwriter('utf-8')(self.streams[CC.STDERR])) sys.stdin = Stream.read_from(self.streams[CC.STDIN]).decode('utf-8') # pretend to have API compatibiliy sys.stdout.flush = lambda: True