Уведомления

Группа в Telegram: @pythonsu

#1 Май 23, 2012 01:10:38

tibs
От:
Зарегистрирован: 2011-06-30
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Дублирование stdout в лог-файл

Подскажите как это можно осуществить? Нашел пример только на перенаправление:

    log_stream = open("1.log", 'a');
STDOUT = sys.stdout.fileno()
#получили новый файловый объект с новым дескриптором > 2, но по прежнему указывающий на открытый файл терминала
new_base_stdout_d = os.dup(STDOUT)
base_stdout = os.fdopen(new_base_stdout_d, 'w')
#теперь на дискрипторе STDOUT откроем файловый объект(а верее, просто сдублируем дескриптор уже открытого файла), а старый поток закроем
os.dup2(log_stream.fileno(), STDOUT)
log_stream.close()



Офлайн

#2 Май 23, 2012 02:00:23

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Дублирование stdout в лог-файл

В юниксе искаропки

program | tee logfile



Офлайн

#3 Май 23, 2012 03:55:07

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Дублирование stdout в лог-файл

А может использовать модуль logging?
ну или ручками, делаете свой класс метод которого пишет полученную строку в файл и в stdout



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Май 23, 2012 08:34:43

tibs
От:
Зарегистрирован: 2011-06-30
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Дублирование stdout в лог-файл

JOHN_16
А может использовать модуль logging?
ну или ручками, делаете свой класс метод которого пишет полученную строку в файл и в stdout

Написал такой класс.

class Logger(object):
def __init__(self):
self.terminal = sys.stdout
self.log = open(name_source+".log", "a")

def write(self, message):
self.terminal.write(message)
self.log.write(message)

А как тогда к logging цеплять хэндлеры?



Офлайн

#5 Май 23, 2012 14:20:39

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Дублирование stdout в лог-файл

Через add_stream() :) или через коструктор.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version