我需要找到一种从 io.ReadCloser 对象中读取一行的方法,或者找到一种在“结束行”符号上拆分字节数组的方法。但是我不知道结束线符号,我找不到它。
我的应用程序执行了一个 php 脚本,需要从脚本中获取实时输出,并在得到它时用它做“某事”。
这是我的一小段代码:
cmd := exec.Command(prog, args)
/* cmd := exec.Command("ls")*/
out, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err)
}
err = cmd.Start()
if err != nil {
fmt.Println(err)
}
out
在此之后,我在 go 例程中监视缓冲区。我尝试了2种方法。
1) nr, er := out.Read(buf)
wherebuf
是一个字节数组。这里的问题是我需要为每个新行制动数组
2)我的第二个选项是创建一个新的 bufio.reader
如果我执行类似的命令,它运行良好,我逐行获取输出,但是如果我执行一个 php 脚本它立即得到一个 End Of File 错误并退出(我猜这是因为 php 的延迟输出)
r := bufio.NewReader(out)
line,_,e := r.ReadLine()ls
编辑:我的问题是我在 go 例程中创建 bufio.Reader 而如果我在StdoutPipe()
minikomi 建议之后立即执行它,它工作正常