diff options
-rw-r--r-- | pym/_emerge/BinpkgVerifier.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/pym/_emerge/BinpkgVerifier.py b/pym/_emerge/BinpkgVerifier.py index d36958717..0283883c1 100644 --- a/pym/_emerge/BinpkgVerifier.py +++ b/pym/_emerge/BinpkgVerifier.py @@ -29,9 +29,19 @@ class BinpkgVerifier(AsynchronousTask): stderr_orig = sys.stderr log_file = None if self.background and self.logfile is not None: - log_file = codecs.open(_unicode_encode(self.logfile, - encoding=_encodings['fs'], errors='strict'), - mode='a', encoding=_encodings['content'], errors='replace') + if sys.hexversion >= 0x3000000: + # Since we are replacing the sys.std* streams, + # we need to use the normal open() function + # so that we get the right class (otherwise our + # code that expects the 'buffer' attribute + # will break). + open_func = open + else: + open_func = codecs.open + log_file = open_func(_unicode_encode(self.logfile, + encoding=_encodings['fs'], errors='strict'), + mode='a', encoding=_encodings['content'], + errors='backslashreplace') try: if log_file is not None: sys.stdout = log_file |