Rumah >pembangunan bahagian belakang >Golang >Tidak boleh membaca daripada Pipe menggunakan exec.Command dalam Go

Tidak boleh membaca daripada Pipe menggunakan exec.Command dalam Go

王林
王林ke hadapan
2024-02-06 08:18:041003semak imbas

无法在 Go 中使用 exec.Command 从 Pipe 读取

Kandungan soalan

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)
}
Bila

Write() 函数不返回错误。但是,当我尝试 ReadLine(), program hang. Apa yang saya buat salah?


Jawapan betul


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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam