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 关注
- 88 浏览
添加回答
举报