【发布时间】:2026-02-06 00:00:01
【问题描述】:
我正在尝试将 Python 程序从 Python 2.7 转换为 Python 3.5。该程序包括 C 库。 C 库的调用不再起作用,但不会引发错误消息。我必须改变它在 Python3 中的工作吗?
class Yasdi:
"""YASDI Wrapper fuer Python"""
def __init__(self,yasdi_lib="libyasdi.so",maxDriverIDs=10,DriverNameBuffer=30):
"""Konstruktor
Parameter:
yasdi_lib = "libyasdi.so" |erwartet Pfad zur yasdi Lib
maxDriverIDs = 10 |Anzahl der max. moegleichen Schnittstellen
DriverNameBuffer = 30 |Anzahl der max.Namenslaenge des Schnittstellennamens"""
self.maxDriverIDs = maxDriverIDs
self.DriverIDArray = array.array("L",[0]*self.maxDriverIDs)
self.DriverNameBuffer = " "*DriverNameBuffer
self.yasdi = ctypes.cdll.LoadLibrary(yasdi_lib)
def yasdiGetDriver(self):
"""Gibt die Anzahl zur verfuegung stehender Schnittstellen zurueck"""
result = self.yasdi.yasdiGetDriver(self.DriverIDArray.buffer_info()[0],self.maxDriverIDs)
return result
def yasdiGetDriverName(self,driverID):
"""Gibt den Namen eine Schnittstelle zurueck, zum Beispiel: COM1 oder /drv/ttyS0 etc.
Parameter:
driverID = erwartet Schnittstellnummer (z.B. 0)"""
self.yasdi.yasdiGetDriverName(driverID,self.DriverNameBuffer,len(self.DriverNameBuffer))
return self.DriverNameBuffer.replace("\x00","").rstrip().lstrip()
def yasdiSetDriverOnline(self,driverID):
"""Setzt eine Schnittstelle(driver) online, Achtung: unter Linux muss die Schnittstelle freigegeben werden!
Parameter:
driverID = Nummer der Schnittstelle (Com1 = 0 etc.)
Rueckgabe:
0: bei Erfolg
1: bei Fehler"""
result = self.yasdi.yasdiSetDriverOnline(driverID)
return result
def yasdiSetDriverOffline(self,driverID):
"""Gibt die Schnittstelle wieder Frei
Parameter:
driverID = erwartet Schnittstellnummer (z.B. 0)"""
self.yasdi.yasdiSetDriverOffline(driverID)
【问题讨论】:
-
如果没有错误,“不再工作”是什么意思? 会发生什么?您要转换的代码在哪里?我们如何帮助实现零细节?
-
我添加了一些代码 - 希望这会有所帮助!
-
代码在 Python35 中运行,但对 C 库的调用没有返回正确的值。当我使用 Python 2.7 运行相同的程序时,一切运行良好。
-
还是 Python3 中的 ctypes 或 C 数组有变化?
标签: python c python-3.x