Maison > développement back-end > Golang > Comment puis-je récupérer la valeur de retour d'une fonction Python appelée depuis un programme Go ?

Comment puis-je récupérer la valeur de retour d'une fonction Python appelée depuis un programme Go ?

Barbara Streisand
Libérer: 2024-11-29 19:28:11
original
752 Les gens l'ont consulté

How Can I Retrieve the Return Value of a Python Function Called from a Go Program?

Appel de fonctions Python depuis Go avec récupération de la valeur de retour

Dans ce scénario, nous visons à combler le fossé entre Go et Python en appelant une fonction Python à partir d'un programme Go et capturer sa valeur de retour pour un traitement ultérieur. Cependant, les premières tentatives se sont révélées infructueuses pour récupérer les données souhaitées.

La pierre d'achoppement

L'exemple minimal fourni illustre le défi :

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    fmt.Println("here we go...")
    program := "python"
    arg0 := "-c"
    arg1 := fmt.Sprintf("'%s'", "import pythonfile; print pythonfile.cat_strings(\"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("concatenation length:", len(out))
    fmt.Println("concatenation:", string(out))
    fmt.Println("...done")
}
Copier après la connexion

Code Python correspondant :

def cat_strings(a, b):
    return a + b
Copier après la connexion

Exécution de go run gofile donne :

here we go...
command args: [python -c 'import pythonfile; print pythonfile.cat_strings("foo", "bar")']
concatenation length:  0
concatenation:  
...done
Copier après la connexion

La solution

Surmonter cet obstacle a nécessité la suppression judicieuse des guillemets inutiles autour de la commande elle-même :

package main

import (
    "fmt"
    "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))
}
Copier après la connexion

Ceci la modification a abouti à une récupération réussie de la valeur de retour de la fonction :

$ python -c "import pythonfile; print pythonfile.cat_strings('foo', 'bar')"
foobar
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal