I noticed that from within py.test .. `sys.stdout.encoding` is set to None. This makes it impossible to print non-ascii unicode strings. To workaround this error, I wrapped the stdout stream using codecs.getwriter as explained in the PrintFails[1] python wiki page. Here's my snippet:
def _message(self, msg, *args): with _good_terminal_stream() as stream: msg = u'[ui] {0}'.format(msg) print >>stream, msg % args @contextmanager def _good_terminal_stream(): """Return a proper terminal stream""" preferredencoding = locale.getpreferredencoding() assert preferredencoding not in (None, 'ascii'), \ 'improper locale encoding: {0}'.format( preferredencoding) stream = codecs.getwriter(preferredencoding)(sys.stdout) try: yield stream finally: stream.close() However, this lead to py.test internal error: def done(self): """ unpatch and clean up, returns the self.tmpfile (file object) """ os.dup2(self._savefd, self.targetfd) self.unsetfiles() os.close(self._savefd) > self.tmpfile.seek(0) E ValueError: I/O operation on closed file /home/sridharr/as/pypm-txtui/eggs/py-1.0.0b7-py2.6.egg/py/io/fdcapture.py:39: ValueError I've made available the entire log file here: http://files.getdropbox.com/u/87045/tmp/pytesterror -srid ***** [1] http://wiki.python.org/moin/PrintFails _______________________________________________ py-dev mailing list py-dev@codespeak.net http://codespeak.net/mailman/listinfo/py-dev