如何将“字节字符串”输入参数传递给从MATLAB调用的python函数?

时间:2019-04-01 01:48:18

标签: python matlab bytestring

我正在尝试从MATLAB调用Python函数。在此Python函数中,输入参数的类型为“字节字符串”。我无法将“字节字符串”参数传递给Python

我正在尝试使用ipc创建服务器-客户端应用程序,其中服务器是纯Python应用程序,客户端是调用python函数的MATLAB应用程序。我已经在Python 3.7环境中安装了Anaconda。

Python服务器代码:

from multiprocessing.connection import Listener

address = ('localhost', 6000)     # family is deduced to be 'AF_INET'
listener = Listener(address, authkey=b'secret password')
conn = listener.accept()
print('connection accepted from', listener.last_accepted)
while True:
    msg = conn.recv()
    print(msg)
    if msg == 'close':
        conn.close()
        break
listener.close()

Python客户端代码(用于测试):

from multiprocessing.connection import Client

address = ('localhost', 6000)
conn = Client(address, authkey=b'secret password')
conn.send('close')
can also send arbitrary objects:
conn.send(['a', 2.5, None, int, sum])
conn.close()

在Python中执行时,上面的服务器-客户端对工作正常。

现在在命令行中尝试使用与上述Python客户端代码等效的MATLAB:

>> mp_pyModule = py.importlib.import_module('multiprocessing.connection');
>> client_fn = mp_pyModule.Client;
>> address = py.tuple({'localhost',int16(6000)});
>> conn = client_fn(address,pyargs('authkey','secret password'));
Error using connection>Client (line 495)
Python Error: TypeError: authkey should be a byte string

我知道我已经在上面传递了一个普通字符串,这就是错误的原因。我要求将上述参数“秘密密码”作为“字节字符串”发送。怎么做?

Python(https://in.mathworks.com/help/matlab/matlab_external/unsupported-matlab-types.html)不受支持的类型对此没有提及。还有其他限制吗?如果我使用Python 2,这可能会起作用。

1 个答案:

答案 0 :(得分:0)

找到的解决方案: 使用 py.bytes(uint8(string))

例如: conn = client_fn(address,pyargs('authkey',py.bytes(uint8('secret password'))));

学分-Walter Roberson @ Mathworks