1 回答

TA貢獻1806條經驗 獲得超8個贊
用于Cmd.StdoutPipe()
在啟動進程之前獲取進程的(管道)輸出Cmd.Start()
(Start()
啟動命令但不等待它完成)。
并使用 a逐行bufio.Scanner
讀取輸入 ( )。io.Reader
例如,我將使用這個打印當前時間 3 次的 bash 腳本,在它們之間休眠 1 秒:
for i in {1..3}; do date; sleep 1; done
執行此操作并逐行讀取其輸出的示例:
cmd := exec.Command("bash", "-c", "for i in {1..3}; do date; sleep 1; done")
out, err := cmd.StdoutPipe()
if err != nil {
log.Fatal(err)
}
defer out.Close()
err = cmd.Start()
if err != nil {
log.Fatal(err)
}
scanner := bufio.NewScanner(out)
for scanner.Scan() {
line := scanner.Text()
fmt.Println("Output:", line)
}
示例輸出:
2022/11/29 14:38:48 Output: Tue Nov 29 02:38:48 PM CET 2022
2022/11/29 14:38:49 Output: Tue Nov 29 02:38:49 PM CET 2022
2022/11/29 14:38:50 Output: Tue Nov 29 02:38:50 PM CET 2022
(每行開頭的第一個日期時間來自包log,以驗證每行在第二次延遲后打印,另一個時間戳是命令的輸出date。)
- 1 回答
- 0 關注
- 108 瀏覽
添加回答
舉報