jeudi 2 octobre 2014

Usage of reload [duplicate]


Vote count:

27




I have seen few py scripts which use this at the top of the script. In what cases one should use it?



import sys
reload(sys)
sys.setdefaultencoding("utf-8")



bludger

2,220

asked Sep 30 '10 at 7:46

mlzboy

2,583

2 Answers



Vote count:

34




accepted




As per the documentation: This allows you to switch from the default ASCII to other encodings such as UTF-8, which the Python runtime will use whenever it has to decode a string buffer to unicode.


This function is only available at Python start-up time, when Python scans the environment. It has to be called in a system-wide module, sitecustomize.py, After this module has been evaluated, the setdefaultencoding() function is removed from the sys module.


The only way to actually use it is with a reload hack that brings the attribute back.


Also, the use of sys.setdefaultencoding() has always been discouraged, and it has become a no-op in py3k. The encoding is hard-wired to utf-8 and changing it raises an error.


I suggest some pointers for readup:





answered Sep 30 '10 at 7:48

pyfunc

30.9k


Vote count:

8





#!/usr/bin/env python
#-*- coding: utf-8 -*-
u = u'moçambique'
print u.encode("utf-8")
print u

chmod +x test.py
./test.py
moçambique
moçambique

./test.py > output.txt
Traceback (most recent call last):
File "./test.py", line 5, in <module>
print u
UnicodeEncodeError: 'ascii' codec can't encode character
u'\xe7' in position 2: ordinal not in range(128)


on shell works , sending to sdtout not , so that is one workaround, to write to stdout .


I made other approach, which is not run if sys.stdout.encoding is not define, or in others words , need export PYTHONIOENCODING=UTF-8 first to write to stdout.



import sys
if (sys.stdout.encoding is None):
print >> sys.stderr, "please set python env PYTHONIOENCODING=UTF-8, example: export PYTHONIOENCODING=UTF-8, when write to stdout."
exit(1)




so, using same example:



export PYTHONIOENCODING=UTF-8
./test.py > output.txt


will work






answered Jul 19 '11 at 3:40






Usage of reload [duplicate]

Aucun commentaire:

Enregistrer un commentaire