如何在 Go 中取得 Shell 指令的即時輸出?
Dec 08, 2024 pm 06:51 PM如何在Go 中擷取Shell 指令的即時輸出
問題:
執行長時間執行的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中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)