[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] python3 issues
On Wed, Mar 27, 2019 at 01:36:10AM +0100, Hans van Kranenburg wrote: > On 3/26/19 2:16 PM, Wei Liu wrote: > > On Mon, Mar 25, 2019 at 10:20:05PM +0000, YOUNG, MICHAEL A. wrote: > >> [...] > >> --- xen-4.12.0-rc6/tools/pygrub/src/pygrub.orig 2019-03-24 > >> 22:44:05.503582025 +0000 > >> +++ xen-4.12.0-rc6/tools/pygrub/src/pygrub 2019-03-24 22:48:24.446113809 > >> +0000 > >> @@ -457,7 +457,7 @@ > >> # limit read size to avoid pathological cases > >> buf = f.read(FS_READ_MAX) > >> del f > >> - self.cf.parse(buf) > >> + self.cf.parse(buf.decode()) > > > > Hmm... This could be a bit problematic for 2 compatibility. I will need > > some time to check the documents. > > The exact moment when you're typing .decode() or .encode() to try fix a > python2/3 problem, you're entering a world of pain (tm). > > [insert big lebowski walter pointing gun gif here] > > Some of the python 2 and 3 compatibility things can be fixed easily by > importing things from the future, but when dealing with strings and > bytes, you're entering the "is it really worth it" department. > > In python 2, strings are bytes, and there's some added duct tape > available to do something with unicode and utf-8. > > In python 3, strings are unicode and bytes are bytes, which is sooooooo > much more convenient. If the strings have to be stored in some location > that stores bytes, you can encode them. If you have some incoming byte > stream, you can decode it. > > I don't really have recommendations to make both of them work with the > same lines of code since I tried and gave up when doing it myself. > > What you're looking at is how the in-memory storage for a 'string' is > done and how to connect input and output to that, while looking at > python 2 and 3 functions with the same name, doing different things in > a different context. There is no sane way to do this that works with > python 2 and 3. I have tested the following snippet: from __future__ import print_function import sys s = b'1234' if sys.version_info[0] < 3: print(s) else: print(s.decode()) It seems to be the easiest way to solve this issue. Wei. > > Hans _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |