【发布时间】:2018-02-22 12:05:31
【问题描述】:
我正在通过exec.Command() 运行一个外部进程,我希望将命令中的标准输出实时打印并写入文件(类似于在命令行中使用tee)。
我可以通过扫描仪和写入器实现这一点:
cmd := exec.Command("mycmd")
cmdStdOut, _ := cmd.StdoutPipe()
s := bufio.NewScanner(cmdStdOut)
f, _ := os.Create("stdout.log")
w := bufio.NewWriter(f)
go func() {
for s.Scan(){
t := s.Text()
fmt.Println(t)
fmt.Fprint(w, t)
w.Flush()
}
}
有没有更惯用的方法来避免破坏Scan 和Flush?
【问题讨论】:
-
cmd.Stdout = f -
哦.....谢谢!
-
但不要忘记处理错误...
-
是的,为了简洁起见,我忽略了 stderr / 错误。我现在还想知道我想在编写它的同时使用 stdout 流(例如,像 tee)。也许我会更新这个问题。
-
io.MultiWriter 加 io.Pipe