brutaler
@brutaler

Перенаправление вывода функций в python

Как перенаправить вывод определенной функции в файл, а затем вернуть поведение вывода так как оно было до этого?
  • Вопрос задан
  • 5058 просмотров
Решения вопроса 1
Amper
@Amper
Можно сделать декоратор, вроде такого:

import sys

def decorator(n):
def out_changer(f):
sys.stdout = open(n,«w+»)
def res_func(*args, **kwargs):
return f(*args, **kwargs)
return res_func
return out_changer

@decorator('testfile.txt')
def your_func(a):
for i in range(a):
print i

func(10)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Rifle
import sys, cStringIO, traceback

def capture(func, *args, **kwargs):
"""Capture the output of func when called with the given arguments.

The function output includes any exception raised. capture returns
a tuple of (function result, standard output, standard error).
"""
stdout, stderr = sys.stdout, sys.stderr
sys.stdout = c1 = cStringIO.StringIO()
sys.stderr = c2 = cStringIO.StringIO()
result = None
try:
result = func(*args, **kwargs)
except:
traceback.print_exc()
sys.stdout = stdout
sys.stderr = stderr
return (result, c1.getvalue(), c2.getvalue())

With the aid of capture it is easy to grab the disassembled code:

import dis

def disassemble(obj=None):
"""Capture the output of dis.dis and return it."""
return capture(dis.dis, obj)[1]
Ответ написан
Комментировать
@MikhailEdoshin
Заменить sys.stdout на файл или другой объект, поддерживающий такие же операции (StringIO подойдет), потом восстановить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы