【发布时间】:2014-07-08 17:40:26
【问题描述】:
我有一个名为“myapp”的应用程序。该应用程序只是写入标准错误。
重要的是,我想捕获 stderr 中写入的内容并实时处理它。我该怎么做呢?
我尝试了下面的代码。 :
cmd := exec.Command("myapp") // this app prints lines to stderr
stderr, err := cmd.StderrPipe()
if err != nil {
log.Fatal(err)
}
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
if b, err := ioutil.ReadAll(stderr); err == nil {
log.Println(string(b))
}
if err := cmd.Wait(); err != nil {
log.Fatal(err)
}
代码没有打印出来。我怀疑这是因为 ioutil.ReadAll() 不是正确调用的函数,因为它等待 EOF。我还能如何从 stderr 管道中读取数据?
您可以将执行的命令替换为输出到 stdout 或 stderr 的任何内容,例如 tail -f mylogfile。关键是,我想在将这些行写入标准输出时对其进行处理。
【问题讨论】:
-
你是如何处理它的?
-
@iliacholy 我计划将每一行发布到 REST API。
-
我这样做的方式是实际使用 bash |管道并使其他应用程序为输入中的每一行发送一个休息命令
-
@fabrizioM 我认为这是正确的做法
-
@rexposadas cnicutar 的解决方案就是你想要的。
标签: go