Last active
March 16, 2023 17:08
-
-
Save michaelmendoza/5be28ee699a794701be32ecc74284f68 to your computer and use it in GitHub Desktop.
A contextmanager to block output from print()
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from contextlib import contextmanager | |
import sys, os | |
@contextmanager | |
def suppress_stdout(): | |
with open(os.devnull, "w") as devnull: | |
old_stdout = sys.stdout | |
sys.stdout = devnull | |
try: | |
yield | |
finally: | |
sys.stdout = old_stdout | |
@contextmanager | |
def suppress_stdout_c(to=os.devnull): | |
''' | |
import os | |
with stdout_redirected(to=filename): | |
print("from Python") | |
os.system("echo non-Python applications are also supported") | |
''' | |
fd = sys.stdout.fileno() | |
##### assert that Python and C stdio write using the same file descriptor | |
####assert libc.fileno(ctypes.c_void_p.in_dll(libc, "stdout")) == fd == 1 | |
def _redirect_stdout(to): | |
sys.stdout.close() # + implicit flush() | |
os.dup2(to.fileno(), fd) # fd writes to 'to' file | |
sys.stdout = os.fdopen(fd, 'w') # Python writes to fd | |
with os.fdopen(os.dup(fd), 'w') as old_stdout: | |
with open(to, 'w') as file: | |
_redirect_stdout(to=file) | |
try: | |
yield # allow code to be run with the redirected stdout | |
finally: | |
_redirect_stdout(to=old_stdout) # restore stdout. | |
# buffering and flags such as | |
# CLOEXEC may be different |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from io import supress_stdout | |
print "You can see this" | |
with suppress_stdout(): | |
print "You cannot see this" | |
print "And you can see this again" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment