命令 Stdout 和 Stderr 的同时控制台和日志输出
所提供代码的目标是将命令 stdout 和 stderr 打印到控制台实时地同时按控制台顺序将它们记录到文件中,而无需修改命令本身。
为了实现这一点,我们可以利用 io.MultiWriter 类型。具体方法如下:
<code class="go">package main import ( "io" "log" "os" "os/exec" ) func main() { // Logging capability f, err := os.OpenFile("log.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { log.Fatalf("Error opening file: %v", err) } defer f.Close() // Define a MultiWriter that includes both the log file and stdout multiWriter := io.MultiWriter(f, os.Stdout) // Set stdout and stderr of the command to the MultiWriter cmd := exec.Command("php", "randomcommand.php") cmd.Stdout = multiWriter cmd.Stderr = multiWriter if err := cmd.Run(); err != nil { log.Fatal(err) } }</code>
通过将 multiWriter 定义为日志文件和 stdout 的组合,我们可以有效地将命令输出同时写入两个目标。 cmd.Run() 会阻塞,直到命令完成,确保维持输出顺序。
此解决方案满足所有要求:
以上是如何同时将命令输出记录并打印到控制台?的详细内容。更多信息请关注PHP中文网其他相关文章!