Maison > développement back-end > Golang > Comment puis-je récupérer avec succès les valeurs de retour d'une fonction Python appelée par un programme Go ?

Comment puis-je récupérer avec succès les valeurs de retour d'une fonction Python appelée par un programme Go ?

Linda Hamilton
Libérer: 2024-11-28 15:31:11
original
996 Les gens l'ont consulté

How Can I Successfully Retrieve Return Values from a Python Function Called by a Go Program?

Appel de fonctions Python depuis Go et récupération des valeurs de retour

Une tâche courante lorsque l'on travaille avec plusieurs langages dans un projet est la possibilité d'invoquer des fonctions d'un langage dans un autre. Dans ce cas, nous explorons comment appeler une fonction Python à partir d'un programme Go et récupérer sa valeur de retour.

Tentative et problème d'origine

Dans une première tentative, le code Go suivant était used :

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

Cependant, cette approche a rencontré un problème où la valeur de retour de la fonction Python n'était pas capturée dans le programme Go. La sortie affichait une chaîne vide, " ".

Analyse du problème

Le problème est survenu en raison de la façon dont la commande Python a été formatée. Les guillemets entourant la commande elle-même conduisaient l'interpréteur Python à traiter la commande comme une seule chaîne au lieu d'une liste d'arguments.

Solution

Pour résoudre le problème, les guillemets entourant la commande étaient supprimé. Le code Go suivant illustre la solution :

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

En supprimant les guillemets, la commande est maintenant exécutée comme prévu et la valeur de retour de la fonction Python peut être correctement capturée dans le programme Go.

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