Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 18, 2006 08:04:32

batman
От:
Зарегистрирован: 2006-08-09
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода

Всем добрый день.
При отправке почты устанавливаю
s.set_debuglevel(1)
как мне правильно перенаправить вывод этой информации в файл?
стандартный поток вывода и ошибки перенаправляются, а отлдадочная информация нет.



Офлайн

#2 Сен. 18, 2006 21:02:50

-=<fantom>=-
От:
Зарегистрирован: 2006-08-12
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода

Для потока ошибок есть свой вывод. По умолчанию - это экран.
В самом начале надо указывать файл логов (перед открытием потока сообщений).



Офлайн

#3 Сен. 19, 2006 08:37:26

batman
От:
Зарегистрирован: 2006-08-09
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода

С ошибками всё понятно, там через RedirectStdio() всё отправляется в файл, а вот конкретно с отладочной информацией этого не происходит, она выводится по умолчанию на экран.



Офлайн

#4 Сен. 19, 2006 16:15:18

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода

:)
Смотрим, например, в smtplib.py.
Есть там примерно такие строки:
if self.debuglevel > 0: print>>stderr, ‘connect:’, (host, port)
Т.е. вывод идёт в stderr.
Делаем:
import sys
f = open('zzz.log', ‘a’) # собственно файл кудыть будет всё выводиться
sys.stderr = f
После этого весь stderr будет идти в файл.



Офлайн

#5 Сен. 19, 2006 17:05:50

batman
От:
Зарегистрирован: 2006-08-09
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода

Сам начинаю понимать, что похоже был не прав. set_debuglevel(1) все-таки выдаёт не отладочную информацию, а протокол обмена с сервером. Вот его и надо отловить.



Офлайн

#6 Сен. 20, 2006 09:09:10

batman
От:
Зарегистрирован: 2006-08-09
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода

Исходя из smtplib.py вывод действительно дожен перенаправлятся в stderr, но не перенаправляется. Не могу понять в чем проблемма… и совет от ofigetitelno не помогает. Может у кого ещё какие мысли есть по этому поводу?



Офлайн

#7 Сен. 20, 2006 13:34:57

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода

:)
Давай свой код, разберёмся…



Офлайн

#8 Сен. 20, 2006 13:48:41

batman
От:
Зарегистрирован: 2006-08-09
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода


# -*- coding: cp1251 -*-
#!/usr/bin/env python
import smtplib
from email.MIMEText import MIMEText
from email.mime.multipart import MIMEMultipart
import base64, cStringIO, email.Message
import wx, os, sys, time

class MailSendBox(wx.Frame):
def __init__(self,parent,id=-1,title='',pos = wx.Point(0,0),size = wx.Size(695,525),style = wx.DEFAULT_DIALOG_STYLE,name = ‘frame’):
pre=wx.PreFrame()
#…………………………………….#

self.initBefore()
def VwXinit(self):
self.SetIcon(wx.Icon(“images\py.ico”,wx.BITMAP_TYPE_ICO));
self.SetTitle('*********')
self.Show(True)
self.PanelFr = wx.Window(self,-1,wx.Point(-5,-5),wx.Size(710,510))
self.PanelFr.Bind(wx.EVT_SHOW,self.PanelFr_VwXEvOnShow)
#…………………………………….#
self.Refresh()
return

def initBefore(self):
f = open('123.log', ‘a’)
sys.stderr = f

return

def sndMail(self,event,s,CountMail,Cm):

#………………………………………….#
cte=“base64”
base64.encode(fp,contentsEncoded)
subMsg=email.Message.Message()
#…………………………………….#
contentsEncoded.close()
msgRoot.attach(subMsg)
#…………………………………….#

msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)
msgText = MIMEText(text)
msgAlternative.attach(msgText)
#………………………………………….#

s = smtplib.SMTP(opt.options,opt.options)

#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
s.set_debuglevel(1)
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#

s.sendmail(me, recipients, msgRoot.as_string())
s.close()

return



if __name__ == ‘__main__’:
app = wx.PySimpleApp()
frame = MailSendBox(parent=None, id=-1)
tm = time.asctime()
frame.Show()

#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
app.RedirectStdio(“MailLog.log”)
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#

print “****************************************************************”#+“\n”
print “#”+“ ”+tm#+“ \n”
print “****************************************************************”#+“\n”
app.MainLoop()



Офлайн

#9 Сен. 20, 2006 14:15:47

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода

Для начала сделай:
app = wx.PySimpleApp(redirect=1, filename='MailLog.log')
т.е. не нужно вызывать app.RedirectStdio отдельно, инициализация этой фигни в конструкторе.
И соответственно самому дальше перехватывать stderr не нужно.



Офлайн

#10 Сен. 20, 2006 14:31:12

batman
От:
Зарегистрирован: 2006-08-09
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенаправление вывода

Спасибо, пробую… Завтра отпишусь…



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version