LINUX.ORG.RU

upstart и locale.getpreferredencoding(False) в python

 ,


0

1

Какого черта если я запускаю программу с помощью правила в /etc/init убунтовским upstart, питон решает по-умолчанию открывать файлы в кодировке 'ANSI_X3.4-1968'? У меня баттхерт. Я из-за этого несколько часов пытался определить, почему когда я запускаю свой недосайт через uwsgi как апстартовский сервис, он ломается при попытке записать файл и ругается на попытку закодировать что-то в ascii, а при точно той же команде от точно того же пользователя просто так - все хорошо. Оказывается, то, в какой кодировке питоновская функция open по умолчанию открывает файл, определяется черт знает чем, и просто так она выбирает 'UTF-8', а из-под upstart - эту дрянь.

Мне сильно припекло, и я хочу знать, кто виноват.

Ответ на: комментарий от Plcmn

Теперь так и сделаю. Теперь, когда проблема известна. Но я из-за этого автоматического выбора кодировки полдня потратил на попытки понять, что идет не так.

hlebushek ★★
() автор топика

А переменная $LANG какое имеет значение во время запуска вашего скрипта? И что возвращает sys.getfilesystemencoding()? Если значение переменной LANG=C или LANG=" - в качестве кодировки будет использоваться NSI_X3.4-1968. Это нормально.

lucentcode ★★★★★
()

Оказывается, то, в какой кодировке питоновская функция open по умолчанию открывает файл, определяется черт знает чем

Это скорее проблема не Питона, а механизма локалей в POSIX и других ОС. Локали POSIX изначально создавались из расчёта «у странных людей из Гардарики должны быть свои странные программы, как они будут работать, белых людей не интересует». А современные программы пытаются работать с какой-то логикой с этим, поэтому получается очень запутанно.

proud_anon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.