問題:
執行長時間執行的shell 指令時在使用os/exec 的Go 中,如何檢索即時輸出並在其變為時對其進行處理可用嗎?
解:
使用stderr 而非stdout:
訊息輸出到stderr 而不是stdout。因此,在建立命令物件時,請連接到 stderr 而不是 stdout。
連續讀取 stderr 的輸出:
建立 bufio.Scanner stderr 並使用 Scan方法逐行或逐字讀取輸出word.
逐行處理輸出:
在範例程式碼中,使用了scanner.Split (bufio.ScanWords)來分割空格上的輸出。根據您的處理要求調整拆分類型。
處理輸出:
以您想要的方式操作輸出,例如擷取和處理進度資訊。
範例程式碼:
package main import ( "bufio" "fmt" "os/exec" "strings" ) func main() { args := "-i test.mp4 -acodec copy -vcodec copy -f flv rtmp://aaa/bbb" cmd := exec.Command("ffmpeg", strings.Split(args, " ")...) stderr, _ := cmd.StderrPipe() cmd.Start() scanner := bufio.NewScanner(stderr) scanner.Split(bufio.ScanWords) for scanner.Scan() { m := scanner.Text() fmt.Println(m) } cmd.Wait() }
輸出:
以上是如何在 Go 中取得 Shell 指令的即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!