From b697480f19cf690a51bfb3c788aa381de43eac79 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Tue, 29 Apr 2025 07:22:01 -0600 Subject: [PATCH] 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 --- tools/u_boot_pylib/terminal.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/u_boot_pylib/terminal.py b/tools/u_boot_pylib/terminal.py index 84531831760..4b9a907a547 100644 --- a/tools/u_boot_pylib/terminal.py +++ b/tools/u_boot_pylib/terminal.py @@ -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()) -- 2.47.2