Eine häufige Aufgabe bei der Arbeit mit mehreren Sprachen in einem Projekt ist die Möglichkeit, Funktionen aus einer Sprache innerhalb einer anderen aufzurufen. In diesem Fall untersuchen wir, wie man eine Python-Funktion aus einem Go-Programm aufruft und ihren Rückgabewert abruft.
In einem ersten Versuch war der folgende Go-Code verwendet:
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)) }
Bei diesem Ansatz trat jedoch ein Problem auf, bei dem der Rückgabewert der Python-Funktion nicht im Go-Programm erfasst wurde. Die Ausgabe zeigte eine leere Zeichenfolge, „ “.
Das Problem entstand aufgrund der Formatierung des Python-Befehls. Die Anführungszeichen, die den Befehl selbst umgaben, führten dazu, dass der Python-Interpreter den Befehl als einzelne Zeichenfolge statt als Liste von Argumenten behandelte.
Um das Problem zu beheben, wurden die Anführungszeichen um den Befehl herum verwendet ENTFERNT. Der folgende Go-Code demonstriert die Lösung:
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)) }
Durch das Entfernen der Anführungszeichen wird der Befehl nun wie vorgesehen ausgeführt und der Rückgabewert der Python-Funktion kann ordnungsgemäß im Go-Programm erfasst werden.
Das obige ist der detaillierte Inhalt vonWie kann ich erfolgreich Rückgabewerte von einer Python-Funktion abrufen, die von einem Go-Programm aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!