diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2017-03-07 08:58:19 +1300 |
---|---|---|
committer | Paul Eggleton <paul.eggleton@linux.intel.com> | 2017-03-07 09:02:06 +1300 |
commit | 05b85281420b640b6fcc85520d24519731fe295d (patch) | |
tree | 9d3464d3f42318ca745fcbde593b24274600c9c3 | |
parent | 19a559cfa665b1add51fad41b7db88237fa82a09 (diff) | |
download | openembedded-core-contrib-05b85281420b640b6fcc85520d24519731fe295d.tar.gz |
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 <jiajie.hu@intel.com> who fixed this in devtool's
very similar code.
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-rwxr-xr-x | layerindex/update.py | 5 |
1 files changed, 3 insertions, 2 deletions
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() |