В 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) безуспешно. Будем очень благодарны за любые идеи о том, как заставить это работать.