我正在尝试通过管道传输命令的输出,但在写入端关闭之前,似乎没有数据从管道中读取。最终我希望它连接到一个 websocket,它在执行命令时传输命令的状态。问题在于,虽然此代码逐行打印消息,但在程序完成执行之前它不会打印任何内容。
cmd := exec.Command(MY_SCRIPT_LOCATION, args)
// create a pipe for the output of the script
// TODO pipe stderr too
cmdReader, err := cmd.StdoutPipe()
if err != nil {
fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err)
return
}
scanner := bufio.NewScanner(cmdReader)
go func() {
for scanner.Scan() {
fmt.Printf("\t > %s\n", scanner.Text())
}
}()
err = cmd.Start()
if err != nil {
fmt.Fprintln(os.Stderr, "Error starting Cmd", err)
return
}
err = cmd.Wait()
if err != nil {
fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err)
return
}
有什么办法可以做类似的事情,让扫描仪在写入管道时逐行读取,而不是在所有内容都写入之后?该程序运行大约需要 20 秒,并且有源源不断的更新,因此让它们一次全部通过是很烦人的。
料青山看我应如是
相关分类