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. Hans _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel