Hello again,
here the issue about my try to run PyMatlab with Python 3. The main problem is, that c_char_p in matlab.py does not accept values of type str but byte (e.g. b"myString"). In my test implementation I simply replaced the values of type str by their byte representation or converted them to byte. This worked. However, I don't now how to implement this, such that its compatible with Python 2 and transformed to valid Python 3 code using py2to3 within the setup-process (this is automatically done when installing a python package under python 3).
One example for the usage are the first lines in the run-method:
def run(self,matlab_statement): #wrap statement to be able to catch errors real_statement = wrap_script.format(matlab_statement) if type(real_statement)==str: real_statement = str.encode(real_statement) self.engine.engEvalString(self.ep,c_char_p(real_statement))
or
def putvalue(self,name,pyvariable): if type(pyvariable)==bytes: self.mx.mxCreateString.restype=POINTER(mxArray) mx = self.mx.mxCreateString(c_char_p(pyvariable)) if type(pyvariable)==str: self.mx.mxCreateString.restype=POINTER(mxArray) mx = self.mx.mxCreateString(c_char_p(str.encode(pyvariable)))
After having changed this, it worked. This is not much work to do, and then this great package can be used with Python 3 ;)
Cheers
Marc