Explorar o código

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
Angus Gratton %!s(int64=5) %!d(string=hai) anos
pai
achega
a85b97a6f5
Modificáronse 1 ficheiros con 9 adicións e 4 borrados
  1. 9 4
      tools/tiny-test-fw/DUT.py

+ 9 - 4
tools/tiny-test-fw/DUT.py

@@ -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