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

时间:2016-11-08 11:00:59

标签: go

我想将某些fmt.Print语句保存到.txt文件中。

我不想存储所有打印状态。我可以这样做吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

对要保存到文件的呼叫使用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