首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将控制台的unicode输出直接重定向到文件中?

是否可以将控制台的unicode输出直接重定向到文件中?
EN

Stack Overflow用户
提问于 2011-04-04 00:02:31
回答 4查看 7.4K关注 0票数 30

我有一个可以将unicode输出到控制台的python脚本,我想将它重定向到一个文件。显然,python中的重定向过程涉及将输出转换为字符串,因此我收到无法解码unicode字符的错误。

那么,有没有办法重定向到以UTF-8编码的文件呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-04 00:32:12

当打印到控制台时,Python在打印之前查看sys.stdout.encoding以确定用于编码unicode对象的编码。

将输出重定向到文件时,sys.stdout.encoding为None,因此Python2默认使用ascii编码。(相比之下,Python3默认为utf-8。)这通常会导致在打印unicode时出现异常。

您可以通过在打印前对unicode进行显式编码来避免此错误:

代码语言:javascript
复制
print (unicode_obj.encode('utf-8'))

或者,您可以重新定义sys.stdout,以便所有输出都以utf-8编码

代码语言:javascript
复制
import sys
import codecs
sys.stdout=codecs.getwriter('utf-8')(sys.stdout)
print(unicode_obj)
票数 32
EN

Stack Overflow用户

发布于 2011-04-04 02:58:04

在将PYTHONIOENCODING脚本重定向到文件之前,将环境变量python设置为所需的编码。这样你就不需要修改原始脚本了。还要确保编写Unicode字符串,否则PYTHONIOENCODING将不起作用。如果您编写字节字符串,字节将按原样发送到终端(或重定向文件)。

票数 14
EN

Stack Overflow用户

发布于 2012-10-16 16:26:06

在Linux上,您可以使用tee并将stderr重定向到/dev/null。

代码语言:javascript
复制
python script.py 2>/dev/null | tee filename.txt

您也不需要修改Python脚本。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5530708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档