go io.Writer 将os.Stdout 输出到控制台改为 string

介绍

在使用模版的时候, 使用os.Stdout,只能输出到控制台,但是我又想将获得的输出模版变成字符串,在其他地方使用。

要修改os.Stdout,那么就要找一个实现了 io.Writer 接口的输出, bytes.Buffer 实现了io.Writer接口

tmpl.Execute(os.Stdout, map[string]interface{}{
	"Person":    "Bob",
	"Timeframe": 1,
})

改为

      
        var tmpl = template.Must(template.New("").Parse(`{{.Person}}{{.Timeframe}}`))
	
        buf := new(bytes.Buffer)
	tmpl.Execute(buf, map[string]interface{}{
		"Person":    "Bob",
		"Timeframe": 1,
	})

	fmt.Println(buf.String(), "=====")

这样就可以使用这个字符串了

转载于:https://my.oschina.net/solate/blog/1596263

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sys.stdout是Python中的标准输出流(Standard Output),默认情况下,其是以字节流(bytes)的形式输出的。但是当我们想以文本(字符)的形式输出时,可以通过将sys.stdout重新赋值来实现。 而io模块是Python中用于处理输入输出的标准库之一,它提供了一种文本I/O和二进制I/O组件的高度可定制化的方式。 在这里,我们使用io模块中的textiowrapper函数对sys.stdout.buffer(即标准输出的字节流)进行封装,使用encoding参数将其设置为使用UTF-8编码。这样,sys.stdout重新赋值后,就能够以UTF-8编码的文本形式输出数据了。 这个技巧在需要将输出流转换为特定编码的文本时非常有用,比如当我们在命令行中输出中文字符时,如果没有进行编码设置,可能会导致乱码问题。通过上述代码设置,我们就可以确保以UTF-8编码正确地输出中文字符。 例如,我们可以将sys.stdout重新赋值为上述代码,然后使用print语句输出中文字符,就能够正常地将中文字符以UTF-8编码的形式输出控制台上。 ### 回答2: sys.stdout是Python中的标准输出流对象,用于向控制台输出信息。而sys.stdout.buffer则是sys.stdout对象的缓冲区。通常情况下,这个缓冲区是以字节流形式存在的。 在某些情况下,我们需要将输出信息以文本的形式进行编码,并且以utf-8的编码格式输出。为了实现这一目的,我们可以使用io模块中的textiowrapper方法对sys.stdout.buffer进行编码转换和封装。 通过将sys.stdout重定向到经过编码封装的sys.stdout.buffer,我们可以确保输出的信息会以UTF-8编码格式在控制台上正确显示。 这个操作很常见,特别是在处理中文字符的时候,因为Python默认的sys.stdout缓冲区使用的是系统默认编码(可能不是UTF-8),导致输出结果乱码的问题。 通过设置io.textiowrapper对象的encoding属性为'utf-8',我们可以确保在进行输出时就会自动进行UTF-8编码,从而避免乱码问题的出现。 总结来说,上述代码就是为了将sys.stdout的缓冲区以UTF-8编码形式进行封装,以便在输出中文字符时正确显示。 ### 回答3: sys.stdout是一个标准输出流对象,用于在控制台上打印输出信息。在默认情况下,它使用的是系统默认的编码方式。然而,在某些情况下,我们可能需要修改sys.stdout的属性,以便在控制台输出特定编码的文本。 sys.stdout.buffer是sys.stdout的一个属性,它是一个字节流对象,可以用于直接写入二进制数据到stdout。通常情况下,我们可以使用它来写入二进制数据,然后通过特定的编码方式将其转换成文本。 io.textiowrapper是一个文本I/O流对象的包装器,它可以将字节流对象包装成文本流对象,并指定特定的编码方式。在这个例子中,我们将sys.stdout.buffer通过io.textiowrapper进行包装,指定了utf-8编码方式,以便在控制台输出以utf-8编码的文本信息。 通过将sys.stdout重新赋值为io.textiowrapper(sys.stdout.buffer, encoding='utf-8'),我们可以确保在打印输出文本时,使用utf-8编码方式,从而避免中文等非ASCII字符乱码的问题。 这种重新赋值的操作通常需要在脚本的开头进行,以确保在后续的代码中使用的print语句输出的文本能够正确显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值