From d293404cd07c0b7b513beb55ee9f3745228cd206 Mon Sep 17 00:00:00 2001 From: Bastian Kleineidam Date: Sat, 5 Dec 2015 13:00:57 +0100 Subject: [PATCH] Replace invlid output before logging it --- doc/changelog.txt | 2 ++ patoolib/util.py | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/doc/changelog.txt b/doc/changelog.txt index 1d6bdd3..af8e252 100644 --- a/doc/changelog.txt +++ b/doc/changelog.txt @@ -9,6 +9,8 @@ Closes: GH bug #28 * Updated PyPI trove classifiers to include Python 3 Closes: GH bug #25 +* Escape output messages before logging them. + Closes: GH bug #29 1.8 (released 19.7.2015) diff --git a/patoolib/util.py b/patoolib/util.py index 7e6f1eb..ff2e456 100644 --- a/patoolib/util.py +++ b/patoolib/util.py @@ -17,6 +17,7 @@ from __future__ import print_function import os import sys +import codecs import shutil import subprocess import mimetypes @@ -492,6 +493,14 @@ def get_single_outfile (directory, archive, extension=""): return outfile + extension +def init_log(): + """Wrap sys.stdout and sys.stderr in encoding-aware stream writers.""" + encoding = locale.getpreferredencoding() + errors = 'backslashreplace' + sys.stdout = codecs.getwriter(encoding)(sys.stdout, errors) + sys.stderr = codecs.getwriter(encoding)(sys.stderr, errors) + + def log_error (msg, out=sys.stderr): """Print error message to stderr (or any other given output).""" print("patool error:", msg, file=out) @@ -686,4 +695,5 @@ def chdir(directory): return olddir +init_log() init_mimedb()