Fix name 'open' is not defined exception. Closes #860

This commit is contained in:
Andrei Betlen 2023-11-02 15:30:55 -04:00
parent fa83cc5f9c
commit 011b95d7f3

View file

@ -3,36 +3,42 @@ import sys
class suppress_stdout_stderr(object): 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 # Oddly enough this works better than the contextlib version
def __enter__(self): def __enter__(self):
self.outnull_file = open(os.devnull, "w") self.outnull_file = self.open(self.os.devnull, "w")
self.errnull_file = open(os.devnull, "w") self.errnull_file = self.open(self.os.devnull, "w")
self.old_stdout_fileno_undup = sys.stdout.fileno() self.old_stdout_fileno_undup = self.sys.stdout.fileno()
self.old_stderr_fileno_undup = sys.stderr.fileno() self.old_stderr_fileno_undup = self.sys.stderr.fileno()
self.old_stdout_fileno = os.dup(sys.stdout.fileno()) self.old_stdout_fileno = self.os.dup(self.sys.stdout.fileno())
self.old_stderr_fileno = os.dup(sys.stderr.fileno()) self.old_stderr_fileno = self.os.dup(self.sys.stderr.fileno())
self.old_stdout = sys.stdout self.old_stdout = self.sys.stdout
self.old_stderr = sys.stderr self.old_stderr = self.sys.stderr
os.dup2(self.outnull_file.fileno(), self.old_stdout_fileno_undup) self.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.errnull_file.fileno(), self.old_stderr_fileno_undup)
sys.stdout = self.outnull_file self.sys.stdout = self.outnull_file
sys.stderr = self.errnull_file self.sys.stderr = self.errnull_file
return self return self
def __exit__(self, *_): def __exit__(self, *_):
sys.stdout = self.old_stdout self.sys.stdout = self.old_stdout
sys.stderr = self.old_stderr self.sys.stderr = self.old_stderr
os.dup2(self.old_stdout_fileno, self.old_stdout_fileno_undup) self.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_stderr_fileno, self.old_stderr_fileno_undup)
os.close(self.old_stdout_fileno) self.os.close(self.old_stdout_fileno)
os.close(self.old_stderr_fileno) self.os.close(self.old_stderr_fileno)
self.outnull_file.close() self.outnull_file.close()
self.errnull_file.close() self.errnull_file.close()