首页 >后端开发 >Golang >如何可靠地捕获 Golang `exec` 命令输出并将其保存到文件中?

如何可靠地捕获 Golang `exec` 命令输出并将其保存到文件中?

DDD
DDD原创
2024-12-02 10:19:13147浏览

How to Reliably Capture and Save Golang `exec` Command Output to a File?

在 Golang 中捕获命令输出并写入文件

在 Golang 中使用 exec 包执行命令时,您可能会遇到想要捕获 stdout 并写入的情况它到一个文件。以下是有关如何实现此目的的详细指南:

最初的方法涉及创建标准输出管道、设置编写器、启动命令,然后将标准输出复制到文件中。然而,这种方法有时会导致输出文件为空。

由于 KirkMcDonald 在 #go-nuts IRC 频道上的见解,出现了一个更简单的解决方案。通过将输出文件直接分配给 cmd.Stdout,命令的 stdout 可以直接写入文件。这是修改后的代码:

package main

import (
    "os"
    "os/exec"
)

func main() {
    // Create the command to be executed
    cmd := exec.Command("echo", "'WHAT THE HECK IS UP'")

    // Open the output file for writing
    outfile, err := os.Create("./out.txt")
    if err != nil {
        panic(err)
    }
    defer outfile.Close()

    // Assign the output file to the command's stdout
    cmd.Stdout = outfile

    // Start the command and wait for it to finish
    err = cmd.Start(); if err != nil {
        panic(err)
    }
    cmd.Wait()
}

通过此改进,命令的 stdout 内容将直接写入指定文件。文件将不再为空,提供预期的输出。

以上是如何可靠地捕获 Golang `exec` 命令输出并将其保存到文件中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn