在 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中文网其他相关文章!