进程可以读取自己的“标准输出”流吗?

the*_*ski 7 multithreading outputstream go output

进程如何读取自己的输出流?我正在编写自动化测试,该自动化测试在与测试相同的过程中启动了几个应用程序子流程(应用程序)。因此,标准输出是测试输出和应用程序输出的混合。

我想在运行时读取输出流,如果看到应用程序中的错误,则测试失败。这可能/可行吗?如果是这样,我该怎么办?

注意:我知道我可以将应用程序作为独立的进程启动,然后读取它们的输出流。我现在的工作量很大。

还要注意,这并不是Go单元测试如何测试函数输出(stdout / stderr)的伪装,尽管该票据是相似且有用的。另一个问题是关于捕获单个函数调用的输出。该票证是关于连续读取整个流的信息。正确答案也有所不同-它需要管道。

was*_*mup 2

是的,您可以使用os.Pipe()然后自己处理:

tmp := os.Stdout
r, w, err := os.Pipe()
if err != nil {
    panic(err)
}
os.Stdout = w
Run Code Online (Sandbox Code Playgroud)

或者转移os.Stdout到另一个文件或strings.Builder.
这是详细的答案:
In Go, how do I capture stdout of a function into a string?