天天看点

Go语言调用python调用matlab,实现matlab并行运行

1、Go语言利用exec可以调用python脚本,并通过websocket把结果传送给前端。注意点1:如何实现cd到指定目录下运行python脚本,cmd.Dir = “E:\test”,进入python脚本所在目录。注意点2:python脚本必须与matlab的.m文件在同一目录下。

matlabPath := "E:\\test\\Analysis.m"
        cmd := exec.Command("python", "test1.py", dataPth, jsonPth, files, upDown, channel, dataSource, matlabPath)
        cmd.Dir = "E:\\test"
        cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
        err := cmd.Start()
        if err != nil {
            log.Error("file service.configure.go, func err2 :", err, ", cmd failed", "cmd :", cmd)
            return
        } else {
            errWait := cmd.Wait()
            if errWait == nil {
                return
            } else {
                pictureStringSlice := this.getPictureFile(filesPath)
                err := websocket.JSON.Send(ws, pictureStringSlice)
                if err != nil {
                    log.Error("err", err)
                }
            }
        }
           

2、python如何调用matlab,利用python的pymatbridge模块可以实现,并且可以并行调用matlab。若保存的图片缩小了,则添加mlab.set_plot_settings(width = 1200,height = 900,inline = True)设置图片大小。

from pymatbridge import Matlab
import sys

if __name_ == '__main__':
    dat = sys.argv[]
    json = sys.argv[]
    picture = sys.argv[]
    upDown = sys.argv[]
    channel = sys.argv[]
    dataSource = sys.argv[]
    pathMat = sys.argv[]
    print pathMat
    mlab = Matlab()
    mlab.start()
    mlab.set_plot_settings(width = ,height = ,inline = True)
    res = mlab.run_func(pathMat,{'arg1':dat ,'arg2':json ,'arg3':picture ,'arg4':upDown,'arg5':channel,'arg6':dataSource})
           

pathMat是matlab主程序所在目录E:\test\Analysis.m,arg1~arg6是传送给matlab的参数。

3、matlab接收参数

%% MATLAB
function retVal = Analysis(args)
strMatFileName = args.arg1;
strJsonFileName = args.arg2;
strOutputPath = args.arg3;
strLink = args.arg4;
strPhyChannel = args.arg5;
strInputPoint = args.arg6;