diff --git a/test/sanity/validate-modules/utils.py b/test/sanity/validate-modules/utils.py index 280cb48e64..8791035401 100644 --- a/test/sanity/validate-modules/utils.py +++ b/test/sanity/validate-modules/utils.py @@ -24,6 +24,13 @@ from io import BytesIO, TextIOWrapper import yaml import yaml.reader +from ansible.module_utils._text import to_text + + +class AnsibleTextIOWrapper(TextIOWrapper): + def write(self, s): + super(AnsibleTextIOWrapper, self).write(to_text(s, self.encoding, errors='replace')) + def find_globals(g, tree): """Uses AST to find globals in an ast tree""" @@ -54,8 +61,8 @@ class CaptureStd(): def __enter__(self): self.sys_stdout = sys.stdout self.sys_stderr = sys.stderr - sys.stdout = self.stdout = TextIOWrapper(BytesIO(), encoding=self.sys_stdout.encoding) - sys.stderr = self.stderr = TextIOWrapper(BytesIO(), encoding=self.sys_stderr.encoding) + sys.stdout = self.stdout = AnsibleTextIOWrapper(BytesIO(), encoding=self.sys_stdout.encoding) + sys.stderr = self.stderr = AnsibleTextIOWrapper(BytesIO(), encoding=self.sys_stderr.encoding) return self def __exit__(self, exc_type, exc_value, traceback): @@ -65,7 +72,7 @@ class CaptureStd(): def get(self): """Return ``(stdout, stderr)``""" - return self.stdout.getvalue(), self.stderr.getvalue() + return self.stdout.buffer.getvalue(), self.stderr.buffer.getvalue() def parse_yaml(value, lineno, module, name, load_all=False):