On Thu, 2017-07-20 at 12:29 +0100, Radostin Stoyanov wrote: > Encoded Unicode in Python 3 is represented as binary data. The > difference with Python2 is that any attempt to mix text and data in > Python 3.0 raises TypeError, whereas if you were to mix Unicode and > 8-bit strings in Python 2.x, it would work if the 8-bit string happened > to contain only 7-bit (ASCII) bytes, but you would get > UnicodeDecodeError if it contained non-ASCII values. > > Reference: > https://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit > > Example: > > ```python > > > > > b'foo.bar'.split('.') > > ['foo', 'bar'] > ``` I'ld rather use normal markdown syntax rather than this github one: 4 spaces indentation is more readable using a non-markdown capable viewer. Please change it with something like this: >>>b'foo.bar'.split('.') ['foo', 'bar'] > > ```python > > > > > b'foo.bar'.split('.') > Could you give more details about this one? I'm not good enough at the spot-the-differences game to find what changes from the first one. > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: a bytes-like object is required, not 'str' > > > > > b'foo.bar'.split(b'.') > > [b'foo', b'bar'] > ``` Same for that block too. > --- > src/virtBootstrap/utils.py | 15 ++++++++------- > src/virtBootstrap/virt_bootstrap.py | 2 +- > 2 files changed, 9 insertions(+), 8 deletions(-) > > diff --git a/src/virtBootstrap/utils.py b/src/virtBootstrap/utils.py > index bd95d35..daabd26 100644 > --- a/src/virtBootstrap/utils.py > +++ b/src/virtBootstrap/utils.py > @@ -80,9 +80,9 @@ def execute(cmd): > output, err = proc.communicate() > > if output: > - logger.debug("Stdout:\n%s", output) > + logger.debug("Stdout:\n%s", output.decode('utf-8')) > if err: > - logger.debug("Stderr:\n%s", err) > + logger.debug("Stderr:\n%s", err.decode('utf-8')) > > if proc.returncode != 0: > raise CalledProcessError(proc.returncode, cmd_str) > @@ -163,8 +163,8 @@ def get_mime_type(path): > """ > Get the mime type of a file. > """ > - return Popen(["/usr/bin/file", "--mime-type", path], > - stdout=PIPE).communicate()[0].split()[1] > + return (Popen(["/usr/bin/file", "--mime-type", path], stdout=PIPE) > + .stdout.read().decode('utf-8').split()[1]) > > > def create_qcow2(tar_file, layer_file, backing_file=None, size=DEF_QCOW2_SIZE): > @@ -269,8 +269,9 @@ def get_image_details(src, raw=False, > proc = Popen(cmd, stdout=PIPE, stderr=PIPE) > output, error = proc.communicate() > if error: > - raise ValueError("Image could not be retrieved:", error) > - return json.loads(output) > + raise ValueError("Image could not be retrieved:", > + error.decode('utf-8')) > + return json.loads(output.decode('utf-8')) > > > def is_new_layer_message(line): > @@ -334,7 +335,7 @@ def write_progress(prog): > # Get terminal width > try: > terminal_width = int(Popen(["stty", "size"], stdout=PIPE).stdout > - .read().split()[1]) > + .read().decode('utf-8').split()[1]) > except Exception: > terminal_width = 80 > # Prepare message > diff --git a/src/virtBootstrap/virt_bootstrap.py b/src/virtBootstrap/virt_bootstrap.py > index 85aca33..c66cc92 100755 > --- a/src/virtBootstrap/virt_bootstrap.py > +++ b/src/virtBootstrap/virt_bootstrap.py > @@ -77,7 +77,7 @@ def set_root_password(rootfs, password): > users = 'root:%s' % password > args = ['chpasswd', '-R', rootfs] > chpasswd = Popen(args, stdin=PIPE) > - chpasswd.communicate(input=users) > + chpasswd.communicate(input=users.encode('utf-8')) > if chpasswd.returncode != 0: > raise CalledProcessError(chpasswd.returncode, cmd=args, output=None) > ACK with the changes in the commit message -- Cedric _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list