- 需求如下:用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 文件中