您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Go中,如何将函数的标准输出捕获到字符串中?

在Go中,如何将函数的标准输出捕获到字符串中?

我同意,fmt.Fprint只要可以管理,就应该使用这些功能。但是,如果您不控制要捕获其输出代码,则可能没有该选项。

Mostafa的答案有效,但是如果您想在没有临时文件的情况下进行操作,则可以使用os.Pipe。这是一个与Mostafa等效的示例,其中一些代码受Go的测试包的启发。

package main

import (
    "bytes"
    "fmt"
    "io"
    "os"
)

func print() {
    fmt.Println("output")
}

func main() {
    old := os.Stdout // keep backup of the real stdout
    r, w, _ := os.Pipe()
    os.Stdout = w

    print()

    outC := make(chan string)
    // copy the output in a separate goroutine so printing can't block indefinitely
    go func() {
        var buf bytes.Buffer
        io.Copy(&buf, r)
        outC <- buf.String()
    }()

    // back to normal state
    w.Close()
    os.Stdout = old // restoring the real stdout
    out := <-outC

    // reading our temp stdout
    fmt.Println("prevIoUs output:")
    fmt.Print(out)
}
Go 2022/1/1 18:14:17 有638人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶