]> git-server-git.apps.pok.os.sepia.ceph.com Git - teuthology.git/commitdiff
orchestra/run: fix string handling 1362/head
authorKyr Shatskyy <kyrylo.shatskyy@suse.com>
Mon, 23 Mar 2020 22:24:31 +0000 (23:24 +0100)
committerKyr Shatskyy <kyrylo.shatskyy@suse.com>
Mon, 23 Mar 2020 22:27:01 +0000 (23:27 +0100)
Signed-off-by: Kyr Shatskyy <kyrylo.shatskyy@suse.com>
teuthology/orchestra/run.py

index 4cb5f94203d0ba917bfa25c5d19c3b7e008ed660..059c94688b1e99d54e8b67b4ebb4cfd230ec928b 100644 (file)
@@ -276,29 +276,36 @@ def copy_to_log(f, logger, loglevel=logging.INFO, capture=None):
         if capture:
             #out = ensure_str(line)
             if PY3:
-                if isinstance(line, str):
-                    out = line.encode()
-                else:
-                    out = line.decode()
                 if isinstance(capture, io.StringIO):
-                    capture.write(out)
+                    if isinstance(line, str):
+                        capture.write(line)
+                    else:
+                        capture.write(line.decode('utf-8', 'replace'))
                 elif isinstance(capture, io.BytesIO):
-                    capture.write(out.encode())
+                    if isinstance(line, str):
+                        capture.write(line.encode())
+                    else:
+                        capture.write(line)
             else:
-                if isinstance(line, str):
-                    out = line.decode()
-                else:
-                    out = line.encode()
                 if isinstance(capture, io.StringIO):
-                    capture.write(out)
+                    if isinstance(line, str):
+                        capture.write(line.decode('utf-8', 'replace'))
+                    else:
+                        capture.write(line)
                 elif isinstance(capture, io.BytesIO):
-                    capture.write(out.encode())
+                    if isinstance(line, str):
+                        capture.write(line)
+                    else:
+                        capture.write(line.encode())
                 else:
                     # isinstance does not work with cStringIO.StringIO and
                     # fails with error:
                     #   TypeError: isinstance() arg 2 must be a class, type,
                     #   or tuple of classes and types
-                    capture.write(out.encode())
+                    if isinstance(line, str):
+                        capture.write(line)
+                    else:
+                        capture.write(line.encode())
         line = line.rstrip()
         # Second part of work-around for http://tracker.ceph.com/issues/8313
         try: