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

如何在 Golang 的文本文件中捕获 fmt.Print 输出

如何在 Golang 的文本文件中捕获 fmt.Print 输出

Go
呼如林 2022-04-20 16:54:21
我想将某些fmt.Print语句保存到 .txt 文件中。我不想存储所有打印语句。我可以这样做吗?
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

package main


import (

    "fmt"

    "io"

    "log"

    "os"

)


func main() {

    file, err := os.Create("myfile")

    if err != nil {

        log.Fatal(err)

    }


    mw := io.MultiWriter(os.Stdout, file)

    fmt.Fprintln(mw, "This line will be written to stdout and also to a file")

}


查看完整回答
反对 回复 2022-04-20
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

使用fmt.Fprint()要保存到文件的调用的方法。还有fmt.Fprintf()和fmt.Fprintln()。


这些函数将目标io.Writer作为第一个参数,您可以将文件 ( *os.File) 传递给该目标。


例如:


f, err := os.Open("data.txt")

if err != nil {

    log.Fatal(err)

}

defer f.Close()


fmt.Println("This goes to standard output.")

fmt.Fprintln(f, "And this goes to the file")

fmt.Fprintf(f, "Also to file, with some formatting. Time: %v, line: %d\n",

    time.Now(), 2)

如果您希望所有fmt.PrintXX()调用都转到您无法控制的文件(例如,您无法更改它们,fmt.FprintXX()因为它们是另一个库的一部分),您可以os.Stdout临时更改,因此所有进一步fmt.PrintXX()的调用都将写入您设置的输出,例如:


// Temporarily set your file as the standard output (and save the old)

old, os.Stdout = os.Stdout, f


// Now all fmt.PrintXX() calls output to f

somelib.DoSomething()


// Restore original standard output

os.Stdout = old


查看完整回答
反对 回复 2022-04-20
  • 2 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

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