如果您需要在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中文網其他相關文章!