Skip to content

Instantly share code, notes, and snippets.

@louisswarren
Last active November 5, 2021 06:35
Show Gist options
  • Save louisswarren/bacc66215f8749f4ccb246c457a91989 to your computer and use it in GitHub Desktop.
Save louisswarren/bacc66215f8749f4ccb246c457a91989 to your computer and use it in GitHub Desktop.
Redirect stdout to a file in python using with block
import sys
class stdio_redirect:
def __init__(self, stdin=None, stdout=None, stderr=None):
self.stdin, self.sys_stdin = stdin, sys.stdin
self.stdout, self.sys_stdout = stdout, sys.stdout
self.stderr, self.sys_stderr = stderr, sys.stderr
def __enter__(self):
sys.stdin = self.stdin
sys.stdout = self.stdout
sys.stderr = self.stderr
return self.sys_stdin, self.sys_stdout, self.stderr
def __exit__(self, exc_type, exc_value, traceback):
sys.stdin = self.sys_stdin
sys.stdout = self.sys_stdout
sys.stderr = self.sys_stderr
if __name__ == '__main__':
with stdio_redirect(stdout=sys.stderr, stderr=sys.stdout) as (f0, f1, f2):
print("1: stderr")
print("2: stdout", file=sys.stderr)
print("3: stdout", file=f1)
print("4: stdout")
print("5: stderr", file=sys.stderr)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment