@alenov
Программист

Почему кодировка в python-скрипт в терминале работает, а в cron — нет?

Python 2.7
В терминале скрипт отрабатывает нормально, на диске создаётся файл с именем на кириллице.
Запускаю в кроне - выдаёт ошибку:

from io import open

def cache_set(key, val, path=None):
    if path is None:
        path = u'%s/cache' % os.getcwd()

    if isinstance(key, str):
        key = key.decode('utf8')

    if isinstance(val, str):
        val = val.decode('utf8')

    elif not isinstance(val, unicode):
        val = str(val).decode('utf8')

    with open(u'{0}/{1}'.format(path, key), 'w', encoding="utf-8") as f:
        f.write(val)

    return True

key = u"Пермь"
val = u"..."
cache_set(key, val)

Traceback (most recent call last):
...
    with open(u'{0}/{1}'.format(path, key), 'w', encoding="utf-8") as f:
IOError: [Errno 2] No such file or directory: '/home/master/cache/\xd0\x9f\xd0\xb5\xd1\x80\xd0\xbc\xd1\x8c'


В crontab:
PYTHONIOENCODING=utf8

Что не так? И ведь не выдаёт ошибку кодирования/декодирования, а генерит закодированное имя.
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
1. Поставь assert перед with open(), убедись что и path и key - именно юникодные строки.
2. Запускаешь в кроне под своим же пользователем? Может, дело в правах?
3. Обязательно нужен питон 2? В 3м как-то попроще.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы