python unicode console

python - ¿Puedo redirigir la salida de Unicode de la consola directamente a un archivo?



console (4)

Tengo un script de Python que genera Unicode en la consola, y me gustaría redirigirlo a un archivo. Aparentemente, el proceso de redirección en python implica convertir el resultado en una cadena, por lo que recibo errores sobre la incapacidad de decodificar caracteres Unicode.

Entonces, ¿hay alguna manera de realizar una redirección en un archivo codificado en UTF-8?


En Linux, puede usar tee y redirigir stderr a / dev / null.

python script.py 2>/dev/null | tee filename.txt

Tampoco necesita modificar su secuencia de comandos de Python.


Establezca la variable de entorno PYTHONIOENCODING en la codificación que desee antes de redirigir un script de python a un archivo. Entonces no tendrá que modificar el script original. Asegúrese de escribir cadenas Unicode también, de lo contrario PYTHONIOENCODING no tendrá ningún efecto. Si escribe cadenas de bytes, los bytes se envían tal como están al terminal (o al archivo redirigido).


Al imprimir en la consola, Python examina sys.stdout.encoding para determinar la codificación que se utilizará para codificar objetos Unicode antes de imprimir.

Al redirigir la salida a un archivo, sys.stdout.encoding es None, por lo que Python2 se configura de manera predeterminada en la codificación ascii . (En contraste, Python3 se establece por defecto en utf-8 ). Esto a menudo conduce a una excepción al imprimir unicode.

Puede evitar el error codificando explícitamente el Unicode usted mismo antes de imprimir:

print (unicode_obj.encode(''utf-8''))

o puede redefinir sys.stdout para que todos los resultados sys.stdout codificados en utf-8 :

import sys import codecs sys.stdout=codecs.getwriter(''utf-8'')(sys.stdout) print(unicode_obj)


import codecs file_object = codecs.open( "filename", "w", "utf-8" ) file_object.write(u"खऔणन") file_object.close()


Esto debería hacer el trabajo.