From 05b85281420b640b6fcc85520d24519731fe295d Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Tue, 7 Mar 2017 08:58:19 +1300 Subject: update.py: use reader to decode subprocess output correctly We can't decode UTF-8 characters byte-by-byte, as soon as we hit a character that's more than one byte long then we'll fail. Use a reader object to do it properly. This fixes parsing current meta-angstrom on master. At the same time, specify errors="surrogateescape" to avoid the update process dying at this point in case of characters that aren't valid UTF-8. Thanks to Jiajie Hu who fixed this in devtool's very similar code. Signed-off-by: Paul Eggleton --- layerindex/update.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'layerindex/update.py') diff --git a/layerindex/update.py b/layerindex/update.py index 5ff7fb4ae7..e5987bbad2 100755 --- a/layerindex/update.py +++ b/layerindex/update.py @@ -11,6 +11,7 @@ import sys import os import optparse +import codecs import logging import subprocess import signal @@ -45,10 +46,10 @@ def run_command_interruptible(cmd): cmd, cwd=os.path.dirname(sys.argv[0]), shell=True, preexec_fn=reenable_sigint, stdout=subprocess.PIPE, stderr=subprocess.STDOUT ) + reader = codecs.getreader('utf-8')(process.stdout, errors='surrogateescape') buf = '' while True: - out = process.stdout.read(1) - out = out.decode('utf-8') + out = reader.read(1, 1) if out: sys.stdout.write(out) sys.stdout.flush() -- cgit 1.2.3-korg