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