Я создаю эмулятор терминала в golang, и я пытался запустить отдельные процессы, из которых я могу скопировать вывод и отобразить его пользователю, но функциональные блоки io.Copy, и, следовательно, я не могу перейти к выходной части
Я посмотрел исходный код, и он блокируется во внутреннем методе ReadFrom, я не могу понять, почему это происходит
package main
import (
"bytes"
"fmt"
"io"
"os"
)
func main() {
inputReader, inputWriter, _ := os.Pipe()
outputReader, outputWriter, _ := os.Pipe()
io.Copy(inputWriter, bytes.NewReader([]byte("\n")))
stdin := inputReader
stdout := outputWriter
stderr := outputWriter
var attr = os.ProcAttr{
Dir: "/tmp",
Env: nil,
Files: []*os.File{
stdin,
stdout,
stderr,
},
Sys: nil,
}
process, startProcessErr := os.StartProcess("/usr/bin/ls", []string{"ls"}, &attr)
if startProcessErr != nil {
panic(startProcessErr)
}
if releaseProcessErr := process.Release(); releaseProcessErr != nil {
panic(releaseProcessErr)
}
var output bytes.Buffer
io.Copy(&output, outputReader)
fmt.Println(output)
}
Может быть, это потому, что я выпускаю процесс, но я не думаю, что это должно произойти