我需要找到一种从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)
}
Run Code Online (Sandbox Code Playgroud)
在此之后,我out在go例程中监视缓冲区.我试过两种方法.
1)nr, er := out.Read(buf)where buf是一个字节数组.这里的问题是我需要为每个新行制动数组
2)我的第二个选项是创建一个新的bufio.reader
如果我执行一个命令就可以正常运行,我逐行得到输出,但如果我执行一个PHP脚本,它立即得到一个文件结束错误并退出(我猜这是因为php的延迟输出)
r := bufio.NewReader(out)
line,_,e := r.ReadLine()ls
编辑:我的问题是我在go例程中创建bufio.Reader,而如果我在StdoutPipe()minikomi建议之后立即执行它,它工作正常
go ×1