Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 8 additions & 30 deletions llama_cpp/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import sys
from typing import Any, Dict

# Avoid "LookupError: unknown encoding: ascii" when open() called in a destructor
outnull_file = open(os.devnull, "w")
errnull_file = open(os.devnull, "w")
class NullDevice():
def write(self, s):
pass

class suppress_stdout_stderr(object):
# NOTE: these must be "saved" here to avoid exceptions when using
Expand All @@ -21,41 +21,19 @@ def __init__(self, disable: bool = True):
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.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.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

self.os.dup2(outnull_file.fileno(), self.old_stdout_fileno_undup)
self.os.dup2(errnull_file.fileno(), self.old_stderr_fileno_undup)

self.sys.stdout = outnull_file
self.sys.stderr = errnull_file
self.sys.stdout = NullDevice()
self.sys.stderr = NullDevice()
return self

def __exit__(self, *_):
if self.disable:
return

# 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.close(self.old_stdout_fileno)
self.os.close(self.old_stderr_fileno)

self.sys.stdout = self.old_stdout
self.sys.stderr = self.old_stderr


class MetaSingleton(type):
Expand Down