首頁 > 後端開發 > Golang > 如何成功檢索 Go 程式中呼叫的 Python 函數的回傳值?

如何成功檢索 Go 程式中呼叫的 Python 函數的回傳值?

Barbara Streisand
發布: 2024-12-04 16:59:14
原創
225 人瀏覽過

How Can I Successfully Retrieve Return Values from Python Functions Called Within a Go Program?

從Go 呼叫Python 函數並檢索傳回值

如果您需要在Go 程式中使用Python 實用程序,本指南將協助您呼叫Python 函數並擷取它們的回傳值。

原始程式碼,如提供的問題:

package main

import "os/exec"
import "fmt"

func main() {
     fmt.Println("here we go...")
     program := "python"
     arg0 := "-c"
     arg1 := fmt.Sprintf("'import pythonfile; print pythonfile.cat_strings(\"%s\", \"%s\")'", "foo", "bar")
     cmd := exec.Command(program, arg0, arg1)
     fmt.Println("command args:", cmd.Args)
     out, err := cmd.CombinedOutput()
     if err != nil {
         fmt.Println("Concatenation failed with error:", err.Error())
     return
     }
     fmt.Println("concatentation length: ", len(out))
     fmt.Println("concatenation: ", string(out))
     fmt.Println("...done")
}
登入後複製

不幸的是,這段程式碼導致了一個空的回傳值。解決方案在於從Python 命令中刪除括起來的撇號:

package main

import "fmt"
import "os/exec"

func main() {
    cmd := exec.Command("python",  "-c", "import pythonfile; print pythonfile.cat_strings('foo', 'bar')")
    fmt.Println(cmd.Args)
    out, err := cmd.CombinedOutput()
    if err != nil { fmt.Println(err); }
    fmt.Println(string(out))
}
登入後複製

此更改揭示了有關Windows 的EscapeArg 函數的一個有趣細節,該函數通過在雙引號前加倍反斜杠並轉義雙引號本身來重寫命令列參數。因此,原始程式碼本質上是轉義 Python 命令,而不是正確執行它。透過消除括起來的撇號,正確的命令將傳遞給 Python,並成功檢索函數的回傳值。

以上是如何成功檢索 Go 程式中呼叫的 Python 函數的回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板