• [^] # Re: environnement ?

    Posté par . En réponse au message UnicodeDecodeError sur un simple readlines (python3, crontab). Évalué à 1.

    J'ai rencontré un problème similaire récemment, mais avec stdout. Dans le doute voici ce qui bloquait sous Python 2.x:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    import sys
    import locale

    print "preferred encoding = {0}".format(locale.getpreferredencoding())
    print "but ..."
    print "sys.stdout.encoding = {0}".format(sys.stdout.encoding)
    print "sys.stdin.encoding = {0}".format(sys.stdin.encoding)
    print "therefore 'print u'unicode string' results in ..."
    print u" *** Python, çuckß *** "


    Maintenant, si tu fais tourner le script précédent avec :
    bash $ LANG="fr_FR.UTF-8" python script.py
    bash $ LANG="C" python script.py
    bash $ LANG="en_GB.UTF-8" python script.py | cat
    bash $ LANG="en_GB.UTF-8" echo "foobar" | python script.py
    bash $ LANG="en_GB.UTF-8" echo "foobar" | python script.py | cat

    ... tu vas obtenir 5 résultats différents.

    Je suppose que ta crontab fait tourner ton script dans un environnement particulier (locales ou LANG différents) ou, pire encore, que tu utilises des pipes ! Essaie de faire tourner le script précédent en remplaçant stdout par stdin et de logger son résultat dans un fichier externe pour comprendre le schmilblick.

    Plus d'info: http://docs.python.org/howto/unicode.html#reading-and-writin(...) (page qui peut se résumer avec a) toujours utiliser string.decode(charset) sur les entrées b) toujours utiliser string.encode(charset) sur les sorties)

    ... mais qui ose encore dire que python est simple ???