代码之家  ›  专栏  ›  技术社区  ›  Corey Goldberg

MS Outlook CDO/MAPI阻止Python文件输出?

  •  1
  • Corey Goldberg  · 技术社区  · 17 年前

    #!/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)

    2 回复  |  直到 9 年前
        1
  •  1
  •   TJG    17 年前

    是的,使用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 ()
    
    
        2
  •  1
  •   Corey Goldberg    17 年前

    正确的脚本如下所示:

    #!/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()