Spaces:
Configuration error
Configuration error
File size: 1,282 Bytes
c29babb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import os
import sys
from contextlib import contextmanager
@contextmanager
def silenced_output():
"""
A context manager to suppress all stdout and stderr,
including from C-level libraries.
"""
# Open a null file descriptor
devnull_fd = os.open(os.devnull, os.O_RDWR)
# Save the original stdout and stderr file descriptors
original_stdout_fd = sys.stdout.fileno()
original_stderr_fd = sys.stderr.fileno()
# Duplicate the original file descriptors to save them
saved_stdout_fd = os.dup(original_stdout_fd)
saved_stderr_fd = os.dup(original_stderr_fd)
try:
# Redirect Python's stdout/stderr file descriptors
# to the null device
sys.stdout.flush()
sys.stderr.flush()
os.dup2(devnull_fd, original_stdout_fd)
os.dup2(devnull_fd, original_stderr_fd)
# Yield control back to the 'with' block
yield
finally:
# Restore the original stdout/stderr from the saved FDs
sys.stdout.flush()
sys.stderr.flush()
os.dup2(saved_stdout_fd, original_stdout_fd)
os.dup2(saved_stderr_fd, original_stderr_fd)
# Close the temporary FDs
os.close(saved_stdout_fd)
os.close(saved_stderr_fd)
os.close(devnull_fd)
|