Python3 C库usag

2024-10-03 23:17:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Python程序从python2.7转换为python3.5。这个程序包括C库。C libs的调用不再工作,但不会产生错误消息。我要改变什么,它是在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)

Tags: selfparameterlibdefresultderdiedriverid
2条回答

这取决于绑定的类型。如果它是一个C绑定,那么您必须将它调整为python3接口并重新编译。如果它是通过ctypes绑定的,那么您需要检查该模块中的更改

上面的代码很好-问题在另一个部分。请注意python3中的字符串在默认情况下是Unicode的-这是我的问题

相关问题 更多 >