From 011b95d7f34cbfc528af75a892757bd9a20838ab Mon Sep 17 00:00:00 2001 From: Andrei Betlen Date: Thu, 2 Nov 2023 15:30:55 -0400 Subject: [PATCH] Fix name 'open' is not defined exception. Closes #860 --- llama_cpp/utils.py | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/llama_cpp/utils.py b/llama_cpp/utils.py index c14f53f..91d8fd6 100644 --- a/llama_cpp/utils.py +++ b/llama_cpp/utils.py @@ -3,36 +3,42 @@ import sys class suppress_stdout_stderr(object): + # NOTE: these must be "saved" here to avoid exceptions when using + # this context manager inside of a __del__ method + open = open + sys = sys + os = os + # Oddly enough this works better than the contextlib version def __enter__(self): - self.outnull_file = open(os.devnull, "w") - self.errnull_file = open(os.devnull, "w") + self.outnull_file = self.open(self.os.devnull, "w") + self.errnull_file = self.open(self.os.devnull, "w") - self.old_stdout_fileno_undup = sys.stdout.fileno() - self.old_stderr_fileno_undup = sys.stderr.fileno() + self.old_stdout_fileno_undup = self.sys.stdout.fileno() + self.old_stderr_fileno_undup = self.sys.stderr.fileno() - self.old_stdout_fileno = os.dup(sys.stdout.fileno()) - self.old_stderr_fileno = os.dup(sys.stderr.fileno()) + self.old_stdout_fileno = self.os.dup(self.sys.stdout.fileno()) + self.old_stderr_fileno = self.os.dup(self.sys.stderr.fileno()) - self.old_stdout = sys.stdout - self.old_stderr = sys.stderr + self.old_stdout = self.sys.stdout + self.old_stderr = self.sys.stderr - os.dup2(self.outnull_file.fileno(), self.old_stdout_fileno_undup) - os.dup2(self.errnull_file.fileno(), self.old_stderr_fileno_undup) + self.os.dup2(self.outnull_file.fileno(), self.old_stdout_fileno_undup) + self.os.dup2(self.errnull_file.fileno(), self.old_stderr_fileno_undup) - sys.stdout = self.outnull_file - sys.stderr = self.errnull_file + self.sys.stdout = self.outnull_file + self.sys.stderr = self.errnull_file return self def __exit__(self, *_): - sys.stdout = self.old_stdout - sys.stderr = self.old_stderr + self.sys.stdout = self.old_stdout + self.sys.stderr = self.old_stderr - os.dup2(self.old_stdout_fileno, self.old_stdout_fileno_undup) - os.dup2(self.old_stderr_fileno, self.old_stderr_fileno_undup) + self.os.dup2(self.old_stdout_fileno, self.old_stdout_fileno_undup) + self.os.dup2(self.old_stderr_fileno, self.old_stderr_fileno_undup) - os.close(self.old_stdout_fileno) - os.close(self.old_stderr_fileno) + self.os.close(self.old_stdout_fileno) + self.os.close(self.old_stderr_fileno) self.outnull_file.close() self.errnull_file.close()