Преглед на файлове

fix:修复python代码问题

Roc преди 2 години
родител
ревизия
5188eabbd6
променени са 3 файла, в които са добавени 33 реда и са изтрити 8 реда
  1. 4 1
      controllers/base_from_calculate.go
  2. 12 3
      controllers/base_from_python.go
  3. 17 4
      services/base_from_python.go

+ 4 - 1
controllers/base_from_calculate.go

@@ -770,10 +770,13 @@ func (this *CalculateController) Refresh() {
 				errMsg = "获取python代码失败 Err:" + err.Error()
 				break
 			}
-			edbData, err := services.ExecPythonCode(edbInfo.EdbCode, edbPythonCode.PythonCode)
+			edbData, err, errMsg := services.ExecPythonCode(edbInfo.EdbCode, edbPythonCode.PythonCode)
 			if err != nil {
 				br.Msg = "获取数据失败"
 				br.ErrMsg = "python代码获取数据失败,err:" + err.Error()
+				if errMsg != "" {
+					br.ErrMsg = errMsg
+				}
 				return
 			}
 			err = models.RefreshAllPythonEdb(edbInfo, edbData)

+ 12 - 3
controllers/base_from_python.go

@@ -46,10 +46,13 @@ func (this *PythonController) ExcePython() {
 		br.Msg = "python代码解析失败"
 		return
 	}
-	edbData, err := services.ExecPythonCode("test", req.PythonCode)
+	edbData, err, errMsg := services.ExecPythonCode("test", req.PythonCode)
 	if err != nil {
 		br.Msg = "获取数据失败"
 		br.ErrMsg = "python代码获取数据失败,err:" + err.Error()
+		if errMsg != "" {
+			br.ErrMsg = errMsg
+		}
 		return
 	}
 	br.Ret = 200
@@ -124,10 +127,13 @@ func (this *PythonController) Add() {
 		br.Msg = "python代码解析失败"
 		return
 	}
-	edbData, err := services.ExecPythonCode(req.EdbName, req.PythonCode)
+	edbData, err, errMsg := services.ExecPythonCode(req.EdbName, req.PythonCode)
 	if err != nil {
 		br.Msg = "获取数据失败"
 		br.ErrMsg = "python代码获取数据失败,err:" + err.Error()
+		if errMsg != "" {
+			br.ErrMsg = errMsg
+		}
 		return
 	}
 	var condition string
@@ -318,10 +324,13 @@ func (this *PythonController) Edit() {
 		br.Msg = "python代码解析失败"
 		return
 	}
-	edbData, err := services.ExecPythonCode(req.EdbName, req.PythonCode)
+	edbData, err, errMsg := services.ExecPythonCode(req.EdbName, req.PythonCode)
 	if err != nil {
 		br.Msg = "获取数据失败"
 		br.ErrMsg = "python代码获取数据失败,err:" + err.Error()
+		if errMsg != "" {
+			br.ErrMsg = errMsg
+		}
 		return
 	}
 

+ 17 - 4
services/base_from_python.go

@@ -1,6 +1,7 @@
 package services
 
 import (
+	"bytes"
 	"encoding/json"
 	"fmt"
 	"hongze/hongze_edb_lib/utils"
@@ -58,7 +59,7 @@ type EdbDataFromPython struct {
 }
 
 // ExecPythonCode 执行Python代码
-func ExecPythonCode(edbCode, reqCode string) (dataMap EdbDataFromPython, err error) {
+func ExecPythonCode(edbCode, reqCode string) (dataMap EdbDataFromPython, err error, errMsg string) {
 	defer func() {
 		if err != nil {
 			fmt.Println("err:", err)
@@ -85,8 +86,20 @@ func ExecPythonCode(edbCode, reqCode string) (dataMap EdbDataFromPython, err err
 	fileHandle.Close()
 
 	cmd := exec.Command(utils.PYTHON_PATH, pythonFile)
-	outputByte, err := cmd.Output()
-	//fmt.Println(err)
+	var out, errMsgOut bytes.Buffer
+	cmd.Stdout = &out
+	cmd.Stderr = &errMsgOut
+	err = cmd.Start()
+	if err != nil {
+		errMsg = errMsgOut.String()
+	}
+	err = cmd.Wait()
+	if err != nil {
+		errMsg = errMsgOut.String()
+		return
+	}
+
+	outputByte := out.String()
 	if err != nil {
 		return
 	}
@@ -134,5 +147,5 @@ func getPythonFrontStr() string {
 
 // getPythonFrontStr 获取python结尾的代码
 func getPythonLaterStr() string {
-	return "\nprint(\"result=\",result.to_json())\ndb.close()"
+	return "\nprint(\"result=\", result.to_json())\ndb.close()"
 }