猿问

在 golang 中,如何将 exec.Cmd 的标准输出写入文件?

我正在尝试运行 shell 命令,捕获 stdout 并将该输出写入文件。但是,我似乎遗漏了几个步骤,因为当程序存在时,我尝试写入的文件是空的。如何捕获命令的标准输出并将其写入文件?


package main


import (

    "bufio"

    "io"

    "os"

    "os/exec"

)


func main() {


    cmd := exec.Command("echo", "'WHAT THE HECK IS UP'")


    // open the out file for writing

    outfile, err := os.Create("./out.txt")

    if err != nil {

        panic(err)

    }

    defer outfile.Close()


    stdoutPipe, err := cmd.StdoutPipe()

    if err != nil {

        panic(err)

    }


    writer := bufio.NewWriter(outfile)


    err = cmd.Start()

    if err != nil {

        panic(err)

    }


    go io.Copy(writer, stdoutPipe)

    cmd.Wait()

}


青春有我
浏览 889回答 3
3回答

慕哥9229398

你需要冲洗作家。添加以下内容:    writer := bufio.NewWriter(outfile)    defer writer.Flush()

BIG阳

我通过将输出文件分配给 解决了这个问题cmd.Stdout,这意味着stdout直接写入文件。它看起来像这样:package mainimport (    "os"    "os/exec")func main() {    cmd := exec.Command("echo", "'WHAT THE HECK IS UP'")    // open the out file for writing    outfile, err := os.Create("./out.txt")    if err != nil {        panic(err)    }    defer outfile.Close()    cmd.Stdout = outfile    err = cmd.Start(); if err != nil {        panic(err)    }    cmd.Wait()}
随时随地看视频慕课网APP

相关分类

Go
我要回答