Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> unicode .. снова, только если запустить через cron 
:(
    Опции темы
amar0k
Дата 15.7.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



имеем програмку, которая бежит по заданым папкам и создает на все файлы линки в другом месте. файлы на английском русском и иврите.
если запускать из терминала  или через ГУИ программы - все путем

но если задать автозапуск через crontab - все время вылетает :
Код


Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.6/threading.py", line 522, in __bootstrap_inner
    self.run()
  File "/home/shatun/workspace/QtTM/src/qttm.py", line 451, in run
    for root, dirs, files in os.walk(lastBackUp+src): #@UnusedVariable
  File "/usr/lib/python2.6/os.py", line 294, in walk
    for x in walk(path, topdown, onerror, followlinks):
  File "/usr/lib/python2.6/os.py", line 294, in walk
    for x in walk(path, topdown, onerror, followlinks):
  File "/usr/lib/python2.6/os.py", line 284, in walk
    if isdir(join(top, name)):
  File "/usr/lib/python2.6/posixpath.py", line 70, in join
    path += '/' + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 1: ordinal not in range(128)


падает соответственно тут: for root, dirs, files in os.walk(lastBackUp+src)
обе переменныe могут быть на любом из 3-х языков.
все в юникоде.

почему падает ТОЛЬКО  при вызове через crontab ??
PM MAIL   Вверх
powerfox
Дата 25.7.2009, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Цитата(amar0k @  15.7.2009,  13:14 Найти цитируемый пост)
почему падает ТОЛЬКО  при вызове через crontab ?? 

Вы уверены, что без кронтаба проверили на всех языках?
Попробуйте так: 
Код

for root, dirs, files in os.walk(unicode(lastBackUp+src, 'utf-8'))



--------------------
user posted image
PM WWW   Вверх
amar0k
Дата 29.8.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



unicode(lastBackUp+src, 'utf-8') - тоже не сработал.

а вот string.encode('utf-8') для каждой строки, что передается параметром в os.walk()  и os.path.join() таки помогло.
хотя странно, при запуске в живую никаких проблем небыло.. нашел еще несколько топиков в гугле с такой же проблемой.. 
но в любом случае для меня этот "костыль" подходит smile







рано обрадовался.. после пары тестов снова стали вылетать ... мля

Это сообщение отредактировал(а) amar0k - 29.8.2009, 15:55
PM MAIL   Вверх
av0000
Дата 30.8.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 11.2.2009

Репутация: 1
Всего: 2



Цитата(amar0k @  29.8.2009,  14:37 Найти цитируемый пост)
рано обрадовался.. после пары тестов снова стали вылетать ... мля


Аналогичная ситуация... (Ubuntu 8.10) Даже хуже - похоже, "теряется" stdout.
По симптомам - если для запущенного процесса не создана нормальная консоль, ему сильно всё урезается. В данном случае, похоже, выставляется локаль по-умолчанию "ascii". Возможно, спасут глобальные установки LANG, LC_ALL и т.п.

Для себя решал запуском через su - с лишним bash-ем в памяти готов мириться...
PM MAIL Jabber   Вверх
amar0k
Дата 2.9.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



Цитата(av0000 @  30.8.2009,  10:05 Найти цитируемый пост)
Для себя решал запуском через su - с лишним bash-ем в памяти готов мириться... 


можно поподробнее? 
PM MAIL   Вверх
av0000
Дата 2.9.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 11.2.2009

Репутация: 1
Всего: 2



Цитата(amar0k @  2.9.2009,  15:11 Найти цитируемый пост)
можно поподробнее?  


Было как-то так:
Код

0/15 * * * * su - -c '~/py/bot.py 2&> ~/py/log/bot.log'


НО! Поскольку падения таки не совсем прекратились (там, правда exception-ы ещё были виноваты), переделал весь вывод на logging с передачей имени файла лога как параметра. Да и редирект stderr-а, показалось, не(-всегда) срабатывает. Можно, конечно, помудрить с подменой stdout, но лень и стандартнее сделать через logging:
Код

log = logging.getLogger() # !!! Global

def initLog(logfile):
    global log
    if not logfile:
        h = logging.StreamHandler(strm=sys.stderr)
    else:
        h = logging.FileHandler(logfile)

    h.setFormatter(logging.Formatter("%(asctime)s %(levelname)s: %(message)s","%d.%m.%Y %H:%M:%S"))
    log.addHandler(h)
    log.setLevel(logging.DEBUG)

if __name__=="__main__":
    logfile = None
    try:
        opts, args = getopt.getopt(sys.argv[1:], "hl:", ["help","log="])
        for o,a in opts:
            if o in ('-h', '--help'):
                print_help()
                sys.exit(0)
            elif o in ('-l','--log'):
                logfile = a

    except getopt.GetoptError, err:
        print "invalid switch. %s" % (err,)
        print_help()
        sys.exit(1)
    except:
        pass

    initLog(logfile)
    log.info("Logging enabled!")
       #...

PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.