brutaler
@brutaler

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

Как перенаправить вывод определенной функции в файл, а затем вернуть поведение вывода так как оно было до этого?
  • Вопрос задан
  • 5079 просмотров
Решения вопроса 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 подойдет), потом восстановить.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы