ANN: psutil 5.3.0 with full unicode support is out

Giampaolo Rodola' g.rodola at gmail.com
Mon Sep 4 06:35:54 EDT 2017


Mmm thanks for pointing this out. I don't have a Windows machine to test
this against right now but it seems you're right and there's something
wrong in my example (which is what I recommend in the official doc BTW, so
it needs to be fixed).

That aside, do you think the rest of my reasoning makes sense? I mean
returning str all the time and provide a strategy to convert the string to
unicode in Python 2?

On Mon, Sep 4, 2017 at 2:54 PM, eryk sun <eryksun at gmail.com> wrote:

> On Sun, Sep 3, 2017 at 11:09 PM, Giampaolo Rodola' <g.rodola at gmail.com>
> wrote:
> >
> > This is an example which filters processes with a funky name which works
> > with both Python 2
> > and 3:
> >
> >     import psutil, sys
> >
> >     PY3 = sys.version_info[0] == 2
> >     LOOKFOR = u"ƒőő.exe"
> >     for proc in psutil.process_iter(attrs=['name']):
> >         name = proc.info['name']
> >         if not PY3:
> >             name = unicode(name, sys.getdefaultencoding(),
> errors="replace")
> >         if LOOKFOR == name:
> >              print("process %s found" % p)
> >
> > This is IMO the best compromise for a lib which aims to work on both
> Python
> > 2 and 3. It's either that or returning Unicode all over the place in
> Python
> > 2, but that's something I considered and rejected because most of the
> times
> > the string is not supposed to have funky characters, so "practicality
> beats
> > purity" in this case.
>
> The encoded name for ANSI codepage 1252 is "\x83oo.exe". Python 2's
> default encoding is ASCII, so the decoded result is u'\ufffdoo.exe'.
> Even if it should be the filesystem encoding ('mbcs'), the result is
> u"ƒoo.exe". Neither equals u"ƒőő.exe".
>
> Instead, shouldn't it encode LOOKFOR as "mbcs" with errors="replace"
> before comparing it to proc.info['name']?
>



-- 
Giampaolo - http://grodola.blogspot.com



More information about the Python-list mailing list