From 8169818dbad3f8f6fccbc7e3de99e86b37ad45f6 Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Mon, 22 Feb 2016 09:12:39 +0100 Subject: [PATCH] Solve exceptions on printing str (Fixes #61) Handle printing of str gracefully by first encoding it to unicode before printing it in the proper encoding. Also fix python2 check. --- Filter.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) Index: rpmlint-rpmlint-1.8/Filter.py =================================================================== --- rpmlint-rpmlint-1.8.orig/Filter.py +++ rpmlint-rpmlint-1.8/Filter.py @@ -24,20 +24,20 @@ _diagnostic = list() _badness_score = 0 printed_messages = {"I": 0, "W": 0, "E": 0} -if sys.stdout.isatty(): - def __print(s): - print(s) -else: - __stdout = sys.stdout - if not __stdout.encoding: # Python < 3 only? - import codecs - if hasattr(__stdout, "buffer"): - __stdout = __stdout.buffer - __stdout = codecs.getwriter( - locale.getpreferredencoding())(__stdout, "replace") +__stdout = sys.stdout +__preferred_encoding = locale.getpreferredencoding() +if hasattr(__stdout, 'xreadlines'): # Python < 3 only + import codecs + if hasattr(__stdout, "buffer"): + __stdout = __stdout.buffer + __stdout = codecs.getwriter( + __preferred_encoding)(sys.stdout, 'replace') - def __print(s): - print(s, file=__stdout) + +def __print(s): + if isinstance(s, str) and hasattr(s, 'decode'): + s = s.decode(__preferred_encoding, 'replace') + print(s, file=__stdout) def printInfo(pkg, reason, *details):