Подтвердить что ты не робот

Можно ли перенаправить вывод unicode из консоли непосредственно в файл?

У меня есть python script, который выводит unicode на консоль, и я хотел бы перенаправить его в файл. По-видимому, процесс перенаправления в python включает в себя преобразование вывода в строку, поэтому я получаю ошибки о невозможности декодирования символов Unicode.

Итак, есть ли способ выполнить перенаправление в файл, закодированный в UTF-8?

4b9b3361

Ответ 1

При печати на консоль Python просматривает sys.stdout.encoding, чтобы определить кодировку, используемую для кодирования объектов Unicode перед печатью.

При перенаправлении вывода в файл sys.stdout.encoding - None, поэтому Python2 по умолчанию использует ascii кодировку. (Напротив, Python3 по умолчанию имеет значение utf-8.) Это часто приводит к исключению при печати юникода.

Вы можете избежать ошибки, явно явно кодируя unicode перед печатью:

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

или вы можете переопределить sys.stdout, чтобы весь вывод был закодирован в utf-8:

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

Ответ 2

Задайте переменную окружения PYTHONIOENCODING нужной кодировке перед перенаправлением python script в файл. Тогда вам не придется изменять оригинальный script. Обязательно записывайте строки Unicode, иначе PYTHONIOENCODING не будет иметь никакого эффекта. Если вы пишете строки байтов, байты отправляются как есть на терминал (или перенаправленный файл).

Ответ 3

В Linux вы можете использовать tee и перенаправить stderr в /dev/null.

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

Вам также не нужно изменять свой Python script.

Ответ 4

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


Это должно выполнить эту работу.