使用exec.Command 函數執行指令時,通常需要將輸出重新導向到日誌以即時記錄-時間監控。雖然 CombinedOutput 可以在命令完成後捕獲整個輸出,但它不適合長時間運行或未完成的進程。
即時輸出重定向的常見解決方案是直接將 stdout 和 stderr 指派給系統輸出流(os.Stdout 和 os.Stderr)。但是,這對於不寫入終端的應用程式可能不實用。
使用管道的解決方案
要將命令輸出重定向到日誌,您可以使用管道。以下是範例:
stdout, err := cmd.StdoutPipe() if err != nil { return nil, err } // Start the command with the pipe in place if err := cmd.Start(); err != nil { return nil, err } // Real-time monitoring of stdout in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) // Write line to log or perform other operations } if err := in.Err(); err != nil { log.Printf("Error: %s", err) }
注意事項
此方法處理 stdout,但您也可以透過建立單獨的管道和 goroutine 來管理 stderr。此外,您可能需要處理上下文取消或其他邊緣情況,以確保正確的清理和資源管理。
以上是如何在 Golang 中將指令輸出即時重新導向到日誌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!