Skip to content
26 changes: 16 additions & 10 deletions llama_cpp/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,18 @@ def __enter__(self):
if self.disable:
return self

# Check if sys.stdout and sys.stderr have fileno method
if not hasattr(self.sys.stdout, 'fileno') or not hasattr(self.sys.stderr, 'fileno'):
return self # Return the instance without making changes

self.outnull_file = self.open(self.os.devnull, "w")
self.errnull_file = self.open(self.os.devnull, "w")

self.old_stdout_fileno_undup = self.sys.stdout.fileno()
self.old_stderr_fileno_undup = self.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_fileno = self.os.dup(self.old_stdout_fileno_undup)
self.old_stderr_fileno = self.os.dup(self.old_stderr_fileno_undup)

self.old_stdout = self.sys.stdout
self.old_stderr = self.sys.stderr
Expand All @@ -40,14 +44,16 @@ def __exit__(self, *_):
if self.disable:
return

self.sys.stdout = self.old_stdout
self.sys.stderr = self.old_stderr
# Check if sys.stdout and sys.stderr have fileno method
if hasattr(self.sys.stdout, 'fileno') and hasattr(self.sys.stderr, 'fileno'):
self.sys.stdout = self.old_stdout
self.sys.stderr = self.old_stderr

self.os.dup2(self.old_stdout_fileno, self.old_stdout_fileno_undup)
self.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)

self.os.close(self.old_stdout_fileno)
self.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()
self.outnull_file.close()
self.errnull_file.close()