Найти - Пользователи
Полная версия: Перенаправление вывода
Начало » Python для экспертов » Перенаправление вывода
1 2 3
batman
И так, и так, результат один и тот же.
Начинаю сомневаться в собственной нормальности. Но может есть еще какой-то способ перехватить ответы сервера, чтоб проанализировать правильность происходящего?
ofigetitelno
Попробуй так:

import wx, smtplib
import sys as _sys

class MyFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, pos=(150, 150), size=(350, 200))

panel = wx.Panel(self)
btn = wx.Button(panel, -1, “Close”)
funbtn = wx.Button(panel, -1, “Send”)

self.Bind(wx.EVT_BUTTON, self.OnTimeToClose, btn)
self.Bind(wx.EVT_BUTTON, self.OnFunButton, funbtn)

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(btn, 0, wx.ALL, 10)
sizer.Add(funbtn, 0, wx.ALL, 10)
panel.SetSizer(sizer)
panel.Layout()

def OnTimeToClose(self, evt):
self.Close()

def OnFunButton(self, evt):
fromaddr = “From: zzz@zzz.zzz
toaddrs = “To: aaa@aaa.aaa
msg = ‘Test message’
print “Message length is %d” % len(msg)
server = smtplib.SMTP('smtp.zzz.zzz')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, “Simple wxPython App”)
self.SetTopWindow(frame)

print “Print statements go to this stdout window by default.”

frame.Show(True)
return True

def RedirectStdio(self, filename=None):
if filename:
_sys.stdout = _sys.stderr = smtplib.stderr = open(filename, ‘a’)
else:
self.stdioWin = self.outputWindowClass()
_sys.stdout = _sys.stderr = smtplib.stderr = self.stdioWin

app = MyApp(redirect=True)
app.MainLoop()

%) столько ещё интересных идей есть…
batman
Спасибо, попробую.
batman
Сегодня только руки дошли попробовать. Большое спасибо ofigetitelno. Все заработало. Осталось только еще понять как и почему.
slav0nic
а что тут понимать? переназначил дескриптору, приравняв их дескриптору файла)
ofigetitelno
:)
фигня в том, что в том же wxPython, перенаправление делается как:
import sys as _sys
_sys.stdout = _sys.stderr = open(filename, ‘a’)
что, по сути, не совсем правильно.
Куски:

import sys
sys.stdout = sys.stderr = open('zzz.log', ‘a’)
print ‘one’
from sys import stderr
print >>stderr, ‘two’

и

import sys
from sys import stderr
sys.stdout = sys.stderr = open('zzz.log', ‘a’)
print ‘one’
print >>stderr, ‘two’

работают, слегка, по разному…
А это не совсем прикольно, когда нужно следить за порядком импортов, да ещё и в стандартных либах.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB