串流指令輸出進度
問題:
如何從長流中流式輸出- 運行命令,提供間歇性更新而不是最終更新結果?
答案:
使用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中文網其他相關文章!