In Szenarien, in denen Sie Python-Dienstprogramme in Ihren Go-Programmen nutzen müssen, unterstützt Sie dieser Leitfaden beim Aufrufen von Python-Funktionen und Abrufen ihrer Rückgabewerte.
Der Originalcode, wie im bereitgestellt Frage:
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") }
Leider führte dieser Code zu einem leeren Rückgabewert. Die Lösung besteht darin, die einschließenden Apostrophe aus dem Python-Befehl zu entfernen:
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)) }
Diese Änderung deckt ein interessantes Detail der EscapeArg-Funktion von Windows auf, die Befehlszeilenargumente neu schreibt, indem sie Backslashes vor doppelten Anführungszeichen verdoppelt und doppelte Anführungszeichen selbst maskiert . Daher entging der ursprüngliche Code im Wesentlichen dem Python-Befehl, anstatt ihn ordnungsgemäß auszuführen. Durch das Entfernen der einschließenden Apostrophe wird der richtige Befehl an Python übergeben und der Rückgabewert der Funktion erfolgreich abgerufen.
Das obige ist der detaillierte Inhalt vonWie kann ich erfolgreich Rückgabewerte von Python-Funktionen abrufen, die in einem Go-Programm aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!