目标:将go中一个二维数组传到pythone中处理并返回。难点在于数据格式的转换。
go代码如下:
package main import ( "os/exec" "syscall" "github.com/astaxie/beego" "encoding/json" ) func main() { a := [][]float64{ {1,2}, {3,4}, } json_a,_:=json.Marshal(a) string_a:=string(json_a) cmd := exec.Command("python", "test.py",string_a) cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} var ret [][]float64 out, _ := cmd.Output() err := json.Unmarshal(out, &ret) beego.Debug(err) beego.Debug(ret) }
test.python文件如下:
import json def setParam(argv): param={} param["a"] = json.loads(argv[1]) return param if __name__ == \'__main__\': param = setParam(sys.argv) a = param["a"] print(a)
可以看到python中处理的结果是将我们go中传来的二维数组原封不动返回回去。
数据传输过程如下:
1.在go中,先将二维数组用 json.Marshal 编码为json,并以字符串形式传到python中,传的时候使用命令行cmd。
2.在python中,使用 json.loads 将接收到的数据解码。并输出。(python输出的格式会自动转为json格式)
3.数据传回go中,在go中使用 json.Unmarshal 解码得到传回的数据。
请发表评论