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.