When temporarily replacing the sys.std* streams, use the normal open() func
authorZac Medico <zmedico@gentoo.org>
Tue, 8 Dec 2009 23:47:38 +0000 (23:47 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 8 Dec 2009 23:47:38 +0000 (23:47 -0000)
in python3 so that we get the right class (otherwise our code that expects
the 'buffer' attribute will break).

svn path=/main/trunk/; revision=14971

pym/_emerge/BinpkgVerifier.py

index d369587177ab91d44a53edef1d80720141704f44..0283883c106a87dda0cbc549cea376e81f54d48d 100644 (file)
@@ -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