由于有时需要将复杂的符号计算的结果传递给python用于时间的仿真控制。通过采用socket的通信能够实现不同程序之间的通信。
这里设置host,IP为127.0.0.1,端口为65435。端口应该大于1023。
Mathematica脚本如下:
Clear["`*"]
socket=SocketConnect[{"127.0.0.1",65435}];
(*设置传输数据*)
m = 2.93232;
x = ToString[m];
Y = x <>" "<> x;
WriteString[socket,Y];(*写入数据*)
message=SocketReadMessage[socket];(*读取数据*)
str = ByteArrayToString[message];
num = StringSplit[str];(*分割字符串*)
Print[ToExpression[num[[1]]]];
python服务端server.py脚本代码如下:
#!/usr/bin/env python3
import socket
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 65435 # Port to listen on (non-privileged ports are > 1023)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
datalist = data.split()
lenx = len(datalist)
print('from mm:')
for i in range(lenx):
print(float(datalist[i]))
strx = '12.0 13.0'
conn.sendall(strx.encode())
s.close()
可以实现简单mathematica与python之间的浮点数组的传输与解析。