проблема с Пэми - PullRequest
       15

проблема с Пэми

1 голос
/ 15 июня 2009

У меня странная проблема с Пейми: http://pamie.sourceforge.net/.

Я написал скрипт для переадресации некоторых портов (25) на основе получателя, найденного в сети. Вот код, который имеет значение:

# forwardc2s(source, destination):    
#   forwards from client to server.
#   Tries to post the message to ICE.
def forwardc2s(source, destination):    
    string = ' '
    message = ''
    while string:
        string = source.recv(1024)
        if string:

            if string[:4] == 'DATA' or message <> '':     # Put the entire text of the email into a variable: message
                message = message + string

            destination.sendall(string)
        else:
            posttotracker(message)                            # post message to tracker.
            source.shutdown(socket.SHUT_RD)
            destination.shutdown(socket.SHUT_WR)

Функция 'posttotracker' еще не завершена ... все, что она содержит:

def posttotracker(message):
    ie = PAMIE('http://google.com/') 

Это дает мне ошибку следующим образом:

Unhandled exception in thread started by <function forwardc2s at 0x00E6C0B0>
Traceback (most recent call last):
  File "main.py", line 2398, in forwardc2s
    posttotracker(message)                            # post message to tracker.
  File "main.py", line 2420, in posttotracker
    ie = PAMIE('http://google.com/')
  File "main.py", line 58, in __init__
    self._ie = win32com.client.dynamic.Dispatch('InternetExplorer.Application')
  File "c:\Python26\lib\site-packages\win32com\client\dynamic.py", line 112, in
Dispatch
    IDispatch, userName = _GetGoodDispatchAndUserName(IDispatch,userName,clsctx)

  File "c:\Python26\lib\site-packages\win32com\client\dynamic.py", line 104, in
_GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "c:\Python26\lib\site-packages\win32com\client\dynamic.py", line 84, in _
GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.II
D_IDispatch)
pywintypes.com_error: (-2147221008, 'CoInitialize has not been called.', None, N
one)

Самое смешное, что если я делаю то же самое вне этой функции (например, в основной функции), библиотека работает точно так, как ожидалось.

Есть идеи?

Простите, если этой информации недостаточно, я только начинающий кодировщик Python.

1 Ответ

1 голос
/ 15 июня 2009

Объект PAMIE не работает в потоках !!!

Я изначально запускал forwardc2s как поток. Когда я просто вызываю его как функцию, все работает нормально!

Считайте, что этот вопрос решен ... с огромной благодарностью резиновая утка .

...