Hi Stephen, thanks for your reply. It has made me look deeper and I found that my fix is not completely satisfying. Python 3 is also concerned. I will submit another version ASAP.
The problem that I was trying to fix with my previous patch only appears when neither the LANG nor LC_ALL env vars are set. Python (2 and 3) assumes ASCII encoding by default which causes nasty errors like the following: $ env -u LC_ALL -u LANG python2 -c "print u's\u00e9duisante'" Traceback (most recent call last): File "<string>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' $ env -u LC_ALL -u LANG python3 -c "print('s\u00e9duisante')" Traceback (most recent call last): File "<string>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' When either LANG or LC_ALL are set to something else than 'C', python tries to encode accordingly. $ env -u LC_ALL - LANG=C.UTF-8 python3 -c "print(u's\u00e9duisante')" séduisante $ env -u LC_ALL - LANG=français python3 -c "print(u's\u00e9duisante')" s�duisante My new patch makes sure that the default encoding is never 'ascii' to avoid the previous problems. But without the nasty hack that replaces stdout and stderr. 2017-04-05, Stephen Finucane: > Actually, I take that back. Let's see if there's a less hacky way to do > this. Seems this is a fairly common problem with a few fixes available. > Would a fix like [1] do the job? > > [1] http://stackoverflow.com/a/11742574/613428 This approach is risky. sys.defaultencoding is used to decode python source. Have a look at these links: http://stackoverflow.com/questions/3828723/why-should-we-not-use-sys-setdefaultencodingutf-8-in-a-py-script https://anonbadger.wordpress.com/2015/06/16/why-sys-setdefaultencoding-will-break-code/ > Also, could you provide some guidance as to how I could reproduce the > issue myself? Is the Patchwork instance using Python 2 or 3? What > environment is pwclient running in? The issue can be reproduced with pwclient executed with python 2 (server python version does not matter). Simply put an invalid URL in ~/.pwclientrc (note the missing /): $ cat ~/.pwclientrc [options] default = dpdk [dpdk] url= http:/dpdk.org/dev/patchwork/xmlrpc/ Then run this: $ git describe v1.1.0-384-g21e2926743a1 $ python2 ./patchwork/bin/pwclient projects $ echo $? 1 -- Robin _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork