gpt4 book ai didi

go - 如何处理 stderr?

转载 作者:IT王子 更新时间:2023-10-29 02:28:04 25 4
gpt4 key购买 nike

我有一个名为“myapp”的应用程序。该应用程序只是写入 stderr。

重要的一点是,我想捕获写在 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。重点是,我想在将行写入标准输出时对其进行处理。

最佳答案

StderrPipe 返回一个 ReadCloser。您可以使用它来创建 bufio.Scanner,然后逐行读取:

sc := bufio.NewScanner(stderr)
for sc.Scan() {
fmt.Printf("Line: %s\n", sc.Text());
}

关于go - 如何处理 stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24638281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com