diff options
author | Chris Johns <chrisj@rtems.org> | 2024-04-19 11:12:09 +1000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2024-04-22 16:42:08 +1000 |
commit | b9d32b3bb5ad68ea0ac98f02273b07ab6b4a520c (patch) | |
tree | 0f22ab410640ccabff4ebb7ab3c7f3237bceb097 | |
parent | rtems-score-thread.ini: Remove _Thread_Close so trace examples link (diff) | |
download | rtems-tools-b9d32b3bb5ad68ea0ac98f02273b07ab6b4a520c.tar.bz2 |
rtemstoolkit: Fix decoding unicode strings in output
-rwxr-xr-x | rtemstoolkit/execute.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/rtemstoolkit/execute.py b/rtemstoolkit/execute.py index 31d3a8a..c7d8134 100755 --- a/rtemstoolkit/execute.py +++ b/rtemstoolkit/execute.py @@ -37,6 +37,7 @@ from __future__ import print_function import functools +import codecs import io import os import re @@ -203,6 +204,10 @@ class execute(object): stacktraces.trace() if trace_threads: print('execute:_readthread: start') + if sys.stdout.encoding is not None: + decoder = codecs.getincrementaldecoder(sys.stdout.encoding)() + else: + decoder = None count = 0 line = '' try: @@ -222,8 +227,8 @@ class execute(object): _output_line(line + '\n', exe, prefix, out, count) break # str and bytes are the same type in Python2 - if type(data) is not str and type(data) is bytes: - data = data.decode(sys.stdout.encoding) + if decoder is not None and type(data) is not str and type(data) is bytes: + data = decoder.decode(data) last_ch = data[-1] sd = (line + data).split('\n') if last_ch != '\n': @@ -382,6 +387,9 @@ class execute(object): if self.verbose: log.output(what + ': ' + cs) log.trace('exe: %s' % (cs)) + if shell and self.shell_exe: + command = arg_list(command) + command[:0] = self.shell_exe if not stdin and self.input: stdin = subprocess.PIPE if not stdout: |