流式传输命令输出进度
问题:
如何从长流中流式输出- 运行命令,提供间歇性更新而不是最终更新结果?
答案:
使用 bufio.NewScanner() 函数和 bufio.ScanLines() 可以让您逐行读取命令行的输出,在结果可用时对其进行流式传输。以下是根据您提供的代码修改的示例:
func main() { cmd := exec.Command("go", "run", "child_process.go") stdout, _ := cmd.StdoutPipe() cmd.Start() scanner := bufio.NewScanner(stdout) for scanner.Scan() { fmt.Println(scanner.Text()) log.Printf(scanner.Text()) } cmd.Wait() }
为了使其有效工作,执行的命令应使用 fmt.Println() 或 log.Printf() 输出进度。
可能的陷阱:
替代解决方案:
如果换行符不可靠,可以使用替代方法雇用:
注意:
按字节或按符文读取可能会带来问题具有多字节 UTF-8 编码字符。应使用足够大的缓冲区来捕获 UTF-8 符文。
以上是如何在 Go 中流式传输长时间运行命令的输出进度?的详细内容。更多信息请关注PHP中文网其他相关文章!