ci: ttfw: Encode serial port data to whatever the console encoding is

This is a bit of a hack, but gives us a way to always log it
This commit is contained in:
Angus Gratton
2020-11-24 18:32:09 +11:00
parent 0aca88a6e9
commit a85b97a6f5

View File

@ -40,6 +40,7 @@ If they using different port then need to implement their DUTPort class as well.
from __future__ import print_function
import time
import re
import sys
import threading
import copy
import functools
@ -78,11 +79,15 @@ def _expect_lock(func):
def _decode_data(data):
""" for python3, if the data is bytes, then decode it to string """
if isinstance(data, bytes):
# convert bytes to string
# convert bytes to string. This is a bit of a hack, we know that we want to log this
# later so encode to the stdout encoding with backslash escapes for anything non-encodable
out_enc = sys.stdout.encoding
if out_enc is None:
out_enc = 'ascii'
try:
data = data.decode("utf-8", "ignore")
except UnicodeDecodeError:
data = data.decode("iso8859-1", )
return data.decode(out_enc, "backslashreplace")
except (UnicodeDecodeError, TypeError): # Python <3.5 doesn't support backslashreplace
return data.decode(out_enc, "replace")
return data