--- /usr/lib/python3.5/site-packages/cram.py 2016-01-16 20:22:50.188589086 +0100 +++ cram.py 2016-01-20 12:02:14.881815552 +0100 @@ -12,6 +12,9 @@ import shutil import time import tempfile +import re + +_newlines_re = re.compile(r'(\r\n|\r|\r)') try: import configparser @@ -168,14 +171,14 @@ cmdline = '%s$ ' % indent conline = '%s> ' % indent - f = open(path) + f = open(path, 'r', encoding='utf-8') abspath = os.path.abspath(path) env = os.environ.copy() env['TESTDIR'] = os.path.dirname(abspath) env['TESTFILE'] = os.path.basename(abspath) p = subprocess.Popen([shell, '-'], bufsize=-1, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - universal_newlines=True, env=env, + universal_newlines=False, env=env, preexec_fn=makeresetsigpipe(), close_fds=os.name == 'posix') salt = 'CRAM%s' % time.time() @@ -199,7 +202,8 @@ after.setdefault(pos, []).append(line) stdin.append('echo "\n%s %s $?"\n' % (salt, i + 1)) - output = p.communicate(input=''.join(stdin))[0] + output = p.communicate(input=''.join(stdin).encode('utf-8'))[0].decode('utf-8') + output = _newlines_re.sub('\n', output) if p.returncode == 80: return (refout, None, []) @@ -336,7 +340,7 @@ log('!', 'failed\n', verbose) if not quiet: log('\n', None, verbose) - errfile = open(errpath, 'w') + errfile = open(errpath, 'w', encoding='utf-8') try: for line in postout: errfile.write(line)