← retour aux snippets

contextlib.redirect_stdout/redirect_stderr

Capturer les impressions d'un bloc dans un buffer pour test/log.

objectif

Capturer les impressions d’un bloc dans un buffer pour test/log.

code minimal

import io, contextlib
buf = io.StringIO()
with contextlib.redirect_stdout(buf):
    print("hello")
print(buf.getvalue().strip() == "hello")  # attendu: True

utilisation

import io, contextlib, sys
err = io.StringIO()
with contextlib.redirect_stderr(err):
    print("x", file=sys.stderr)
print("x" in err.getvalue())

variante(s) utile(s)

import io, contextlib
out = io.StringIO()
with contextlib.redirect_stdout(out):
    print(1); print(2)
print(out.getvalue().count("\n") == 2)

notes

  • Idéal pour tester des CLI sans toucher à sys.stdout globalement.
  • Pensez à réinitialiser/fermer vos buffers si volumineux.