1 回答
TA贡献1906条经验 获得超10个赞
我正在处理一个类似的问题,而 creack 的 pty 可能对于你想要的东西来说有点太抽象了。我刚刚使用了 golang 标准 xterm 终端仿真器https://pkg.go.dev/golang.org/x/term和一个管道。
这是我的意思的一个例子的部分片段。您的 stdin 流被送入stdin_writer并且您的 stdout 被写入writer,不要忘记Flush()!
stdin_reader, stdin_writer := io.Pipe()
reader := bufio.NewReader(stdin_reader)
stdout_writer := bytes.Buffer{}
writer := bufio.NewWriter(&stdout_writer)
rw := bufio.NewReadWriter(reader, writer)
t := term.NewTerminal(rw, prompt)
// constantly be reading lines
go func() {
for {
line, err := t.ReadLine()
if err == io.EOF {
log.Printf("got EOF")
}
if err != nil {
log.Printf("got err")
}
if line == "" {
continue
}
log.Printf("LINE: %s", line)
}
}()
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报