例如,在Python中,我可以执行以下操作:
realout = sys.stdout
sys.stdout = StringIO.StringIO()
some_function() # prints to stdout get captured in the StringIO object
result = sys.stdout.getvalue()
sys.stdout = realout
您可以在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)
}
问题内容: 我正在使用对对象执行某些操作的Python库 并更改它。这样做时,它会向stdout打印一些统计信息,我希望掌握这些信息。正确的解决方案是更改以返回相关信息, 但是开发人员需要一段时间才能解决此问题。作为一种解决方法,我考虑过解析对stdout的任何写入。 如何捕获代码中两点之间的stdout输出,例如 ? 问题答案: 试试这个上下文管理器: 用法: 现在是一个包含函数调用打印的行的列
问题内容: 我试图用Python编写程序,并被告知运行.exe文件。运行此.exe文件时,它会吐出大量数据,并且我需要在屏幕上打印出一定的行。我很确定我需要使用或类似的东西,但是我是子处理的新手,没有任何线索。有人有简单的方法让我完成此工作吗? 问题答案: 像这样:
问题内容: 由于某些其他原因,我使用的c ++共享库将一些文本输出到标准输出。在python中,我想捕获输出并 保存到一个变量中 。关于重定向标准输出,还有许多类似的问题,但在我的代码中不起作用。 在第5行中, func() 将调用共享库,共享库生成的文本仍输出到控制台!如果将 func() 更改 为print“ hello” ,则可以使用! 我的问题是: 如何将c ++共享库的stdout捕获
问题内容: 我想捕获到字符串的输出。 PHP文档说: 与将结果直接输出到浏览器的任何东西一样,输出控制功能可用于捕获此功能的输出,并将其保存在字符串中(例如)。 这可能如何工作的一个例子是什么? 这是不可能的,因为它不会给我所需的信息。 问题答案: 使用输出缓冲:
问题内容: 我正在生成大量的XML,当用户单击表单按钮时,这些XML将作为发布变量传递到API。我还希望能够事先向用户显示XML。 该代码有点像以下结构: 我的XML正在生成一些while循环和其他内容。然后需要在两个位置(预览和表单值)中显示它。 我的问题是。我如何在变量中捕获生成的XML或其他内容,所以我只需要生成一次,然后将其打印出来就可以在预览中生成,然后在表单值中生成? 问题答案:
问题内容: 我有一个正在运行并使用的脚本 这返回 我想要内联最后四个字符,这样 问题答案: 怎么样,用开关。例如,要获取“ hello”的最后四个字符: 请注意,我使用5(4 + 1),因为会添加一个换行符。如下面的Brad Koch所建议,请使用来防止添加换行符。