Это возможно с таким декоратором, как:
import sys
def redirect_stderr_stdout(stderr=sys.stderr, stdout=sys.stdout):
def wrap(f):
def newf(*args, **kwargs):
old_stderr, old_stdout = sys.stderr, sys.stdout
sys.stderr = stderr
sys.stdout = stdout
try:
return f(*args, **kwargs)
finally:
sys.stderr, sys.stdout = old_stderr, old_stdout
return newf
return wrap
Использовать как:
@redirect_stderr_stdout(some_logging_stream, the_console):
def fun(...):
# whatever
или, если вы не хотите изменять источник для fun
, назовите его напрямую как
redirect_stderr_stdout(some_logging_stream, the_console)(fun)
Но учтите, что это не потокобезопасно.