Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mendapatkan Nilai Pulangan Fungsi Python yang Dipanggil daripada Program Go?

Bagaimanakah Saya Boleh Mendapatkan Nilai Pulangan Fungsi Python yang Dipanggil daripada Program Go?

Barbara Streisand
Lepaskan: 2024-11-29 19:28:11
asal
686 orang telah melayarinya

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

Memanggil Fungsi Python daripada Go dengan Return Value Retrieval

Dalam senario ini, kami berhasrat untuk merapatkan jurang antara Go dan Python dengan menggunakan fungsi Python daripada program Go dan menangkap nilai pulangannya untuk pemprosesan selanjutnya. Walau bagaimanapun, percubaan awal telah terbukti tidak berjaya dalam mendapatkan semula data yang diingini.

Balok Sandung

Contoh minimum yang diberikan menggambarkan cabaran:

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")
}
Salin selepas log masuk

Kod Python yang sepadan:

def cat_strings(a, b):
    return a + b
Salin selepas log masuk

Melaksanakan go run gofile menghasilkan:

here we go...
command args: [python -c 'import pythonfile; print pythonfile.cat_strings("foo", "bar")']
concatenation length:  0
concatenation:  
...done
Salin selepas log masuk

Penyelesaian

Mengatasi halangan ini memerlukan penyingkiran yang bijak bagi petikan yang tidak perlu di sekeliling perintah itu sendiri:

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))
}
Salin selepas log masuk

Ini pengubahsuaian menghasilkan kejayaan mendapatkan kembali pemulangan fungsi nilai:

$ python -c "import pythonfile; print pythonfile.cat_strings('foo', 'bar')"
foobar
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nilai Pulangan Fungsi Python yang Dipanggil daripada Program Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan