为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
青春有我 2021-06-03 13:43:14
我正在尝试运行 shell 命令,捕获 stdout 并将该输出写入文件。但是,我似乎遗漏了几个步骤,因为当程序存在时,我尝试写入的文件是空的。如何捕获命令的标准输出并将其写入文件?package mainimport (    "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()}
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

你需要冲洗作家。添加以下内容:


    writer := bufio.NewWriter(outfile)

    defer writer.Flush()


查看完整回答
反对 回复 2021-06-28
?
BIG阳

TA贡献1859条经验 获得超6个赞

我通过将输出文件分配给 解决了这个问题cmd.Stdout,这意味着stdout直接写入文件。它看起来像这样:


package main


import (

    "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()

}


查看完整回答
反对 回复 2021-06-28
  • 3 回答
  • 0 关注
  • 888 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信