MS Outlook CDO / MAPI блокирует вывод файла Python? - PullRequest
1 голос
/ 28 января 2009

Вот пример проблемы, с которой я сталкиваюсь. Я использую расширения 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()

Почему открытие сеанса для почтового ящика в середине моего скрипта блокирует дальнейший вывод файла? есть идеи? (другие операции не блокируются, только этот файл ввода / вывода asfaik)

Ответы [ 2 ]

1 голос
/ 29 января 2009

Да, смена каталога - известная ошибка при использовании 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 ()

1 голос
/ 29 января 2009

отвечая на мой собственный вопрос. похоже, что ваш рабочий каталог меняется, когда вы читаете письмо. Если вы установите его обратно, ваш файл ввода / вывода работает нормально.

правильный скрипт будет выглядеть так:

#!/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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...