u_boot_pylib: Allow control of capturing

Tests often capture output so they can check it. This means that if the
test fails it is not easy to see what the output actually was.

Add a -N flag which writes out the output after it has been captured.
This is not a perfect solution but it is simple and seems to work well
in practice.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2025-05-27 10:07:41 +01:00
parent 84f3deaa99
commit b697480f19
+14
View File
@@ -28,6 +28,13 @@ last_print_len = None
# stackoverflow.com/questions/14693701/how-can-i-remove-the-ansi-escape-sequences-from-a-string-in-python
ansi_escape = re.compile(r'\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])')
# True if we are capturing console output
CAPTURING = False
# Set this to False to disable output-capturing globally
USE_CAPTURE = True
class PrintLine:
"""A line of text output
@@ -280,10 +287,17 @@ class Color(object):
# ...do something...
@contextmanager
def capture():
global CAPTURING
capture_out, capture_err = StringIO(), StringIO()
old_out, old_err = sys.stdout, sys.stderr
try:
CAPTURING = True
sys.stdout, sys.stderr = capture_out, capture_err
yield capture_out, capture_err
finally:
sys.stdout, sys.stderr = old_out, old_err
CAPTURING = False
if not USE_CAPTURE:
sys.stdout.write(capture_out.getvalue())
sys.stderr.write(capture_err.getvalue())