我有一个脚本,可以读取邮件服务器上的消息,并根据消息正文的内容将它们保存在特定的文件夹中。间歇性地,通常每天一到两次,它在执行这部分代码时失败:
if not os.path.isfile(att_path) :
# finally write the stuff
fp = open(att_path, 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
ext = att_path.split(".")[-1]
print "att_path",att_path
f = open(att_path.replace("."+ext,".txt"),'wb')
f.write(headers)
f.write("nnn")
f.write(body)
f.close()
filelist.append(vdir+"/"+filename)
messageReceived = True
else:
noErrors = False
errFiles.append(vdir+"/"+filename)
它将实际的附件保存在预期的目录中,但不保存带有标题和正文信息的后续文本文件。由于抛出异常("[Erno 9]Bad file descriptor"),电子邮件不会被标记为删除,并保留在服务器上,直到保存的附件被删除或移动,此时两个文件都将被保存,不会出现任何错误。
我很困惑是什么原因造成的,因为它每天处理几百封电子邮件,没有任何问题,除了这个间歇性的问题。
在使用pywin32运行的脚本(将python作为Windows服务运行)中,我遇到了间歇性的错误描述符错误。一个几乎相同的脚本(没有pywin32样板)在cmd中运行时没有问题。模块回溯还指向各种打印语句,因此我注释掉了所有的打印语句,它起作用了!
如果我错了,请纠正我,我怀疑这与缺少stdout有关。我曾经使用print语句进行调试,但在这之后切换到了日志记录模块。