我正在尝试将一个Python程序从Python2.7转换到Python3.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)发布于 2019-12-02 22:29:12
上面的代码很好--问题出在不同的地方。请注意,Python3中的字符串默认是Unicode -这是我的问题!
发布于 2019-11-25 20:40:14
这取决于绑定的类型。如果它是C绑定,则必须将其适应Python3接口并重新编译。如果它是通过ctype绑定的,那么您将需要检查该模块中的更改。
https://stackoverflow.com/questions/59031932
复制相似问题