From e7ea6b350c848c3ecbd6990db4c224250a0a7511 Mon Sep 17 00:00:00 2001 From: Andrew Garrett <2rs2ts@users.noreply.github.com> Date: Sat, 4 Mar 2017 20:01:50 -0800 Subject: [PATCH] Fix lambda stdout/stderr mocking (#851) Originally, the code was setting sys.stdout and sys.stderr back to the original, official forms, but this breaks idioms like mocking stdout to capture printing output for tests. So instead, we will reset sys.stdout and sys.stderr to what they were before running the lambda function, so that in case someone is mocking stdout or stderr, their tests won't break. --- moto/awslambda/models.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/moto/awslambda/models.py b/moto/awslambda/models.py index 069717ca4..c0593bcde 100644 --- a/moto/awslambda/models.py +++ b/moto/awslambda/models.py @@ -135,6 +135,8 @@ class LambdaFunction(object): print("Exception %s", ex) try: + original_stdout = sys.stdout + original_stderr = sys.stderr codeOut = StringIO() codeErr = StringIO() sys.stdout = codeOut @@ -150,8 +152,8 @@ class LambdaFunction(object): finally: codeErr.close() codeOut.close() - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ + sys.stdout = original_stdout + sys.stderr = original_stderr return self.convert(result) def invoke(self, request, headers):