Heim >Backend-Entwicklung >Golang >Wie kann ich erfolgreich Rückgabewerte von Python-Funktionen abrufen, die in einem Go-Programm aufgerufen werden?

Wie kann ich erfolgreich Rückgabewerte von Python-Funktionen abrufen, die in einem Go-Programm aufgerufen werden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-04 16:59:14209Durchsuche

How Can I Successfully Retrieve Return Values from Python Functions Called Within a Go Program?

Python-Funktionen von Go aus aufrufen und Rückgabewerte abrufen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn