在專案中使用多種語言時的一個常見任務是能夠在另一種語言中呼叫一種語言的函數。在本例中,我們正在探索如何從 Go 程式呼叫 Python 函數並檢索其傳回值。
在最初的嘗試中,以下Go 程式碼是使用:
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("python", "-c", fmt.Sprintf("'import pythonfile; print pythonfile.cat_strings(\"%s\", \"%s\")'", "foo", "bar")) out, err := cmd.CombinedOutput() if err != nil { fmt.Println(err) return } fmt.Println(string(out)) }
但是,這種方法遇到了一個問題,即Go 程式中未捕獲Python 函數的回傳值。輸出顯示一個空字串“”。
問題是由於Python指令的格式化方式所引起的。命令本身周圍的引號導致 Python 解釋器將命令視為單一字串而不是參數列表。
要解決此問題,命令周圍的引號是已刪除。下面的 Go 程式碼示範了解決方案:
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("python", "-c", "import pythonfile; print pythonfile.cat_strings('foo', 'bar')") out, err := cmd.CombinedOutput() if err != nil { fmt.Println(err) return } fmt.Println(string(out)) }
透過刪除引號,命令現在可以按預期執行,並且可以在 Go 程式中正確捕獲 Python 函數的傳回值。
以上是如何成功取得Go程式呼叫的Python函數的回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!