在Go 中執行命令可讓您與外部進程交互,但如果您需要即時輸出,有一種方法來實現它。
在您的程式碼片段中,指令完成後會立即列印所有輸出。要即時顯示輸出,您可以結合下面概述的技術:
// ... Previous code for _, cp := range cmdParams { log.Printf("Starting %s in folder %s...", cp[1:], cp[0]) cmd := exec.Command(cp[1], cp[2:]...) cmd.Dir = cp[0] stdout, err := cmd.StdoutPipe() if err != nil { log.Printf("%s cmd.StdoutPipe() error: %v\n", cp[1:], err) return } // Start command: if err = cmd.Start(); err != nil { log.Printf("%s start error: %v\n", cp[1:], err) return } // Stream command output: scanner := bufio.NewScanner(stdout) scanner.Split(bufio.ScanRunes) for scanner.Scan() { fmt.Print(scanner.Text()) } if scanner.Err() != nil { log.Printf("Reading %s stdout error: %v\n", cp[1:], err) return } // Get execution success or failure: if err = cmd.Wait(); err != nil { log.Printf("Error running %s: %v\n", cp[1:], err) return } log.Printf("Finished %s", cp[1:]) } // ... Remaining code
此修改使用 bufio.Scanner 即時讀取命令的標準輸出。 Split(bufio.ScanRunes) 指示掃描器讀取單一字符,這使您可以在產生輸出時顯示輸出。
重複呼叫scanner.Scan() 並列印scanner.Text() 直到到達輸出結尾時,您可以在螢幕上即時傳輸命令的輸出。
以上是如何在 Go 中串流命令輸出以獲取即時結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!