summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/BinpkgVerifier.py16
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