首頁 > 後端開發 > Golang > 如何取得 Go 程式呼叫的 Python 函數的回傳值?

如何取得 Go 程式呼叫的 Python 函數的回傳值?

Barbara Streisand
發布: 2024-11-29 19:28:11
原創
685 人瀏覽過

How Can I Retrieve the Return Value of a Python Function Called from a Go Program?

透過回傳值擷取從Go 呼叫Python 函數

在這種情況下,我們的目標是透過從Go 程式呼叫Python 函數來彌合Go 和Python 之間的差距並捕獲其返回值以進行進一步處理。然而,初步嘗試未能成功檢索所需資料。

絆腳石

提供的最小範例說明了挑戰:

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    fmt.Println("here we go...")
    program := "python"
    arg0 := "-c"
    arg1 := fmt.Sprintf("'%s'", "import pythonfile; print pythonfile.cat_strings(\"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("concatenation length:", len(out))
    fmt.Println("concatenation:", string(out))
    fmt.Println("...done")
}
登入後複製

對應Python程式碼:

def cat_strings(a, b):
    return a + b
登入後複製

執行go run gofile產生:
here we go...
command args: [python -c 'import pythonfile; print pythonfile.cat_strings("foo", "bar")']
concatenation length:  0
concatenation:  
...done
登入後複製

解決方案

克服這個障礙需要明智地刪除命令本身不必要的引號:
package main

import (
    "fmt"
    "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))
}
登入後複製

此修改命令本身不必要的引號:
$ python -c "import pythonfile; print pythonfile.cat_strings('foo', 'bar')"
foobar
登入後複製
此修改命令本身不必要的引號:此修改命令本身不必要的引號:這個修改導致成功檢索函數的回傳值:

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

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