首页 > 后端开发 > Golang > 正文

如何在 Go 中将执行输出实时重定向到记录器?

Barbara Streisand
发布: 2024-11-08 01:59:02
原创
962 人浏览过

How to Redirect Execution Output to a Logger in Real-time in Go?

在 Go 中将执行输出重定向到 Logger

在 Go 中,exec 包提供了执行外部命令的机制。虽然 CombinedOutput 方法可以在命令完成后捕获整个输出,但它可能不适合长时间运行或未完成的进程。

要将命令的输出实时重定向到记录器,需要更多需要灵活的方法。一种技术涉及使用管道将命令的输出连接到记录器。

这是一个示例代码片段:

import (
    "bufio"
    "log"
    "os/exec"
)

func main() {
    cmd := exec.Command("yes")

    // Create a pipe to connect the command's stdout to the logger
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        log.Fatalf("Failed to create stdout pipe: %v", err)
    }

    // Start the command
    if err := cmd.Start(); err != nil {
        log.Fatalf("Failed to start command: %v", err)
    }

    // Create a buffered reader to read the output line by line
    in := bufio.NewScanner(stdout)

    // Read the output and log it in real-time
    for in.Scan() {
        log.Printf(in.Text())
    }

    if err := in.Err(); err != nil {
        log.Printf("Error reading command output: %v", err)
    }
}
登录后复制

在此示例中,还可以通过创建来同时处理 Stderr 流一个单独的 goroutine。通过将命令的输出传输到记录器,开发人员可以捕获并记录其实时输出,从而更轻松地监视应用程序中的进程并对其进行故障排除。

以上是如何在 Go 中将执行输出实时重定向到记录器?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板