Saya sedang menulis program go yang menghantar data ke program lain melalui stdin dan membaca respons melalui stdout.
Berikut ialah skrip yang bertindak sebagai "pelayan gema" jenis:
import sys if __name__=='__main__': for line in sys.stdin: print("Hello", line.strip())
Apabila saya cuba berkomunikasi dengan program dalam Go, ia akan bertahan buf.ReadLine()
. Ini kod Go saya:
package main import ( "bufio" "log" "os/exec" ) func main() { cmd := exec.Command("python3", "app.py") stdout, _ := cmd.StdoutPipe() stdin, _ := cmd.StdinPipe() cmd.Start() stdin.Write([]byte("Bob\n")) buf := bufio.NewReader(stdout) buf.ReadLine() log.Println(buf) }
Write()
函数不返回错误。但是,当我尝试 ReadLine()
, program hang. Apa yang saya buat salah?
Ini bukan masalah dengan kod Go; program Python anda menimbal keluaran kerana stdoutnya adalah paip dan bukan terminal, jadi Go tidak mempunyai apa-apa untuk dibaca dan anda mendapat kebuntuan, kedua-dua proses adalah menunggu input, dan proses tidak menghasilkan apa-apa output.
Lihat Cara Siram Fungsi Cetakan atau Lumpuhkan Penimbalan Output untuk cara mengendalikannya dalam Python - yang pertama terpakai pada satu kenyataan cetakan, yang kedua pada keseluruhan program. Untuk contoh mudah anda semuanya adalah sama, tetapi dalam kes lain ia mungkin berbeza, jadi anda patut mengetahui pilihannya.
Atas ialah kandungan terperinci Tidak boleh membaca daripada Pipe menggunakan exec.Command dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!