MCPcopy Index your code
hub / github.com/abetlen/llama-cpp-python / suppress_stdout_stderr

Class suppress_stdout_stderr

llama_cpp/_utils.py:14–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12
13
14class suppress_stdout_stderr(object):
15 # NOTE: these must be "saved" here to avoid exceptions when using
16 # this context manager inside of a __del__ method
17 sys = sys
18 os = os
19
20 def __init__(self, disable: bool = True):
21 self.disable = disable
22
23 # Oddly enough this works better than the contextlib version
24 def __enter__(self):
25 if self.disable:
26 return self
27
28 self.old_stdout_fileno_undup = STDOUT_FILENO
29 self.old_stderr_fileno_undup = STDERR_FILENO
30
31 self.old_stdout_fileno = self.os.dup(self.old_stdout_fileno_undup)
32 self.old_stderr_fileno = self.os.dup(self.old_stderr_fileno_undup)
33
34 self.old_stdout = self.sys.stdout
35 self.old_stderr = self.sys.stderr
36
37 # In Jupyter notebooks, ipykernel replaces sys.stdout/stderr with
38 # OutStream objects that hold their own copy of the original fd in
39 # _original_stdstream_copy. This bypasses our dup2 redirect, so we
40 # need to point that copy at the real fd temporarily.
41 # https://github.com/ipython/ipykernel/blob/912923542d55e6c80c0e7c1f94c648b52a225011/ipykernel/iostream.py#L618-L622
42 self._saved_stdout_copy = getattr(
43 self.sys.stdout, "_original_stdstream_copy", None
44 )
45 self._saved_stderr_copy = getattr(
46 self.sys.stderr, "_original_stdstream_copy", None
47 )
48 if self._saved_stdout_copy is not None:
49 self.sys.stdout._original_stdstream_copy = self.old_stdout_fileno_undup
50 if self._saved_stderr_copy is not None:
51 self.sys.stderr._original_stdstream_copy = self.old_stderr_fileno_undup
52
53 self.os.dup2(outnull_file.fileno(), self.old_stdout_fileno_undup)
54 self.os.dup2(errnull_file.fileno(), self.old_stderr_fileno_undup)
55
56 self.sys.stdout = outnull_file
57 self.sys.stderr = errnull_file
58 return self
59
60 def __exit__(self, *_):
61 if self.disable:
62 return
63
64 self.sys.stdout = self.old_stdout
65 self.sys.stderr = self.old_stderr
66
67 self.os.dup2(self.old_stdout_fileno, self.old_stdout_fileno_undup)
68 self.os.dup2(self.old_stderr_fileno, self.old_stderr_fileno_undup)
69
70 self.os.close(self.old_stdout_fileno)
71 self.os.close(self.old_stderr_fileno)

Callers 10

__init__Method · 0.85
functionary_chat_handlerFunction · 0.85
get_grammarFunction · 0.85
_init_mtmd_contextMethod · 0.85
mtmd_freeMethod · 0.85
_init_mtmd_contextMethod · 0.85
mtmd_freeMethod · 0.85
__init__Method · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…