需求如下:用python写个发送mail的程序 。开启debug 。现在想将这个debug写进一个文件中,代码如下 : stdout_ = sys.stdout sys.stdout = open("debug.txt","write") try: s = smtplib.SMTP() s.set_debuglevel(1) s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(me,mailto_list,msg.as_string()) s.close() print "send_mail success" return True except Exception,e: print maildebug print "send_mail false" return False sys.stdout = stdout_
但是实际上,debug的输出 仍然是输出在屏幕上的。
查看 smtplib 的源码,发现:
from sys import stderr if self.debuglevel > 0: print>>stderr, 'connect:', (host, port)
包里直接 print>>stderr 使用这个语句,所以在外界无法使用 sys.stdout = open("debug.txt","write") 来重定向。
那么方法应该如下:
s = smtplib.SMTP() s.set_debuglevel(1) smtplib.stderr=open("debug.txt","write") s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(me,mailto_list,msg.as_string()) s.close()
这样子就会把stderr 存进debug.txt 文件中