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

Ale*_*lex 30 python unicode console

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

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

unu*_*tbu 32

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

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

您可以通过在打印前自己显式编码unicode来避免错误:

print (unicode_obj.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

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

import sys
import codecs
sys.stdout=codecs.getwriter('utf-8')(sys.stdout)
print(unicode_obj)
Run Code Online (Sandbox Code Playgroud)


Mar*_*nen 14

PYTHONIOENCODING在将python脚本重定向到文件之前,将环境变量设置为所需的编码.然后您将不必修改原始脚本.确保也写入Unicode字符串,否则PYTHONIOENCODING将无效.如果您编写字节字符串,则字节将按原样发送到终端(或重定向文件).


Gaë*_*ard 5

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

python script.py 2>/dev/null | tee filename.txt
Run Code Online (Sandbox Code Playgroud)

您也不需要修改Python脚本.