go gin框架調用cmd運行python腳本問題


報錯1:exec: "python3 test.py": executable file not found in $PATH

在單個go程序中直接執行以下腳本沒有問題

func TestCmdPython(t *testing.T) {
    //test.txt的內容為圖片的base64字符串
    //filePath := "test.txt"
    //newFileName := "test.jpg"
    //CmdPythonSaveImageDpi(filePath,newFileName)
    cmd := exec.Command("python3 test.py")
    //cmd.Dir, _ = os.Getwd()
    fmt.Println("cmd.Path:",cmd.Path)
    fmt.Println("cmd.Dir:",cmd.Dir)
    //out,err := cmd.Output()
}

但是在gin中開啟子線程去執行腳本,就會有報錯1的出現

go diffPython()

func diffPython(result1, result2 string,scope string) bool { //args := []string{} fmt.Println(os.Getwd()) cmd := exec.Command("python3 ./script/test.py") fmt.Println("cmd.Path:",cmd.Path) fmt.Println("cmd.Dir:",cmd.Dir) out,err := cmd.Output() if err != nil { fmt.Println("diffPython:",err) } result := string(out) fmt.Println(result) //if strings.Index(result, "success") != 0 { // err = errors.New(fmt.Sprintf("main.py error:%s", result)) //} res, _ := strconv.ParseBool(result) return res }

1.gin運行后當前目錄為項目的目錄,而不是go文件所在的目錄

2.gin中的exec.Commond會將python3 test.py識別為一整個命令,而不是python3 +參數

 

解決方案,將python和運行文件分開

//執行python腳本
func diffPython(result1, result2 string,scope string) bool {
    //args := []string{}
    fmt.Println(os.Getwd())
    cmd := exec.Command("python3","./script/test.py")
    fmt.Println("cmd.Path:",cmd.Path)
    fmt.Println("cmd.Dir:",cmd.Dir)
    out,err := cmd.Output()
    if err != nil {
        fmt.Println("diffPython:",err)
    }
    result := string(out)
    fmt.Println(result)
    //if strings.Index(result, "success") != 0 {
    //    err = errors.New(fmt.Sprintf("main.py error:%s", result))
    //}
    res, _ := strconv.ParseBool(result)
    return res
}

其中還會有一個報錯  exit status 1,是因為我的腳本為python3的不能用python -dir執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM