以下是我遇到的问题的一个示例。我正在使用Python Win32扩展来访问Outlook邮箱并检索邮件。
下面是一个应该将“hello world”写入文本文件的脚本。我需要从Outlook邮箱中获取一些消息,我发现了一些奇怪的东西。我连接到邮箱一次后,我不能再打印任何文件。这是一个显示问题的修剪版本:
#!/usr/bin/env python
from win32com.client import Dispatch
fh = open('foo.txt', 'w')
fh.write('hello ')
fh.close()
session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\nprodreport');
session.Logoff()
fh = open('foo.txt', 'a')
fh.write('world')
fh.close()
如果我没有附加到邮箱并注释掉以下行,它显然可以正常工作:
session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\ncorey');
session.Logoff()
为什么在我的脚本中间打开一个邮箱会话阻止进一步的文件输出?有任何想法吗? (其他操作不被阻止,只有这个文件i / o asfaik)
答案 0 :(得分:1)
回答我自己的问题。当您阅读电子邮件时,看起来您的工作目录会发生变化。如果你把它设置回去,你的文件i / o就可以了。
正确的脚本如下所示:
#!/usr/bin/env python
import os
from win32com.client import Dispatch
fh = open('foo.txt', 'w')
fh.write('hello ')
fh.close()
cwd = os.getcwd()
session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\ncorey');
session.Logoff()
os.chdir(cwd)
fh = open('foo.txt', 'a')
fh.write('world')
fh.close()
答案 1 :(得分:1)
是的,使用CDO / MAPI时,目录更改是已知的问题。它在MSDN中的某处“记录”(例如http://support.microsoft.com/kb/269170)。你可以在Python中轻松地重现它:
import os
import win32com.client
print os.getcwd ()
win32com.client.Dispatch ("MAPI.Session")
print os.getcwd ()