Dalam senario di mana anda perlu memanfaatkan utiliti Python dalam program Go anda, panduan ini akan membantu anda menggunakan fungsi Python dan mendapatkan semula nilai pulangannya.
Kod asal, seperti yang disediakan dalam soalan:
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") }
Malangnya, kod ini menghasilkan nilai pulangan kosong. Penyelesaiannya terletak pada mengalih keluar tanda kutip yang dilampirkan daripada perintah Python:
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)) }
Pengubahsuaian ini mendedahkan perincian menarik tentang fungsi EscapeArg Windows, yang menulis semula hujah baris arahan dengan menggandakan garis miring ke belakang sebelum petikan berganda dan melepaskan petikan berganda itu sendiri. . Oleh itu, kod asal pada dasarnya melarikan diri daripada arahan Python dan bukannya melaksanakannya dengan betul. Dengan menghapuskan tanda kutip yang dilampirkan, arahan yang betul dihantar kepada Python dan nilai pulangan fungsi berjaya diambil.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Berjaya Mendapatkan Nilai Pulangan daripada Fungsi Python yang Dipanggil Dalam Program Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!