Как заставить сервер DDE работать в python 3? - PullRequest
0 голосов
/ 26 февраля 2020

В 2015 году я опубликовал вопрос о том, как Создать сервер DDE в python и непрерывно отправлять данные . Ответ и код, опубликованный JayleoPlayGround на этот вопрос, работал безупречно в python 2.7, и я использовал его до недавнего времени.

Поскольку Python 2 больше не поддерживается активно с января 2020 года, я хочу переместите мой код на python 3. Я установил pywin32 (версия 227) с помощью pip на python 3.7.6 и попытался использовать тот же код, что и раньше:

# coded by JayleoPlayGround
# use Portable Python 2.7.5.1 + pywin32-214

import time
import win32ui, dde
from pywin.mfc import object


class DDETopic(object.Object):
    def __init__(self, topicName):
        self.topic = dde.CreateTopic(topicName)
        object.Object.__init__(self, self.topic)
        self.items = {}

    def setData(self, itemName, value):
        try:
            self.items[itemName].SetData( str(value) )
        except KeyError:
            if itemName not in self.items:
                self.items[itemName] = dde.CreateStringItem(itemName)
                self.topic.AddItem( self.items[itemName] )
                self.items[itemName].SetData( str(value) )


ddeServer = dde.CreateServer()
ddeServer.Create('Orbitron')
ddeTopic = DDETopic('Tracking')
ddeServer.AddTopic(ddeTopic)

while True:
    yourData = time.ctime() + ' UP0 DN145000001 UMusb DMfm AZ040 EL005 SNNO SATELLITE'
    ddeTopic.setData('Tracking', yourData)
    win32ui.PumpWaitingMessages(0, -1)
    time.sleep(0.1)

При запуске вышеуказанного кода в python 3.7.6 и с использованием pywin32 (версия 227) внешнее клиентское приложение DDE, с которым я взаимодействую, может подключиться к серверу DDE, но строка данных не получена правильно. Как описано выше, если я использую Python 2.7 с pywin32 (версия 214), это работает нормально, однако.

Поскольку сообщения об ошибках не отображаются, я теряюсь, что проблема под python 3. I перепробовал все доступные версии pywin32 для этой python версии (от 222 до 227) безуспешно. Будем очень благодарны за любые идеи о том, как заставить это работать.

...