Decoding a process output

Francis Moreau francis.moro at gmail.com
Wed Mar 5 09:07:18 CET 2014


On 03/04/2014 05:05 PM, Peter Otten wrote:
> Francis Moreau wrote:
> 
>> Hi,
>>
>> In my understanding (I'm relatively new to python), I need to decode any
>> bytes data provided, in my case, by a shell command (such as findmnt)
>> started by the subprocess module. The goal of my application is to parse
>> the command outputs.
>>
>> My application runs only on linux BTW and should run fine on both python
>> 2.7 and py3k.
>>
>> My question is when decoding the output bytes data of the external
>> command, which encoding should I use ?
>>
>> Should I guess the encoding by inspecting LANG or any LC_* environment
>> variables ?
>>
>> Should I force one of those environment variable to a specific value
>> before running my external command ?
>>
>> Thanks for any tips.
> 
> You can use locale.getpreferredencoding(), which seems to evaluate LANG:
> 
> $ python3 -c 'import locale; print(locale.getpreferredencoding())'
> UTF-8
> $ LANG= python3 -c 'import locale; print(locale.getpreferredencoding())'
> ANSI_X3.4-1968

Hmm I'm confused here: when unsetting or changing LANG, the encoding is
changed on the fly that makes me wonder which part of the linux system
encodes the command output. I don't think it's the latter, is the libc ?

Thanks




More information about the Python-list mailing list