1 |
Author: zmedico |
2 |
Date: 2009-08-06 09:27:54 +0000 (Thu, 06 Aug 2009) |
3 |
New Revision: 13932 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/JobStatusDisplay.py |
7 |
Log: |
8 |
Convert unicode if necessary before writing to stdout. |
9 |
|
10 |
|
11 |
Modified: main/trunk/pym/_emerge/JobStatusDisplay.py |
12 |
=================================================================== |
13 |
--- main/trunk/pym/_emerge/JobStatusDisplay.py 2009-08-06 09:18:49 UTC (rev 13931) |
14 |
+++ main/trunk/pym/_emerge/JobStatusDisplay.py 2009-08-06 09:27:54 UTC (rev 13932) |
15 |
@@ -73,6 +73,13 @@ |
16 |
temporarily overridden stdout.""" |
17 |
return sys.stdout |
18 |
|
19 |
+ def _write(self, s): |
20 |
+ if sys.hexversion < 0x3000000 and isinstance(s, unicode): |
21 |
+ # avoid potential UnicodeEncodeError |
22 |
+ s = s.encode('utf_8', 'replace') |
23 |
+ self.out.write(s) |
24 |
+ self.out.flush() |
25 |
+ |
26 |
def _init_term(self): |
27 |
""" |
28 |
Initialize term control codes. |
29 |
@@ -110,23 +117,19 @@ |
30 |
return ">>> %s" % msg |
31 |
|
32 |
def _erase(self): |
33 |
- self.out.write( |
34 |
+ self._write( |
35 |
self._term_codes['carriage_return'] + \ |
36 |
self._term_codes['clr_eol']) |
37 |
- self.out.flush() |
38 |
self._displayed = False |
39 |
|
40 |
def _display(self, line): |
41 |
- self.out.write(line) |
42 |
- self.out.flush() |
43 |
+ self._write(line) |
44 |
self._displayed = True |
45 |
|
46 |
def _update(self, msg): |
47 |
|
48 |
- out = self.out |
49 |
if not self._isatty: |
50 |
- out.write(self._format_msg(msg) + self._term_codes['newline']) |
51 |
- self.out.flush() |
52 |
+ self._write(self._format_msg(msg) + self._term_codes['newline']) |
53 |
self._displayed = True |
54 |
return |
55 |
|
56 |
@@ -142,8 +145,7 @@ |
57 |
if self._isatty and self._displayed: |
58 |
self._erase() |
59 |
|
60 |
- self.out.write(self._format_msg(msg) + self._term_codes['newline']) |
61 |
- self.out.flush() |
62 |
+ self._write(self._format_msg(msg) + self._term_codes['newline']) |
63 |
self._displayed = False |
64 |
|
65 |
if was_displayed: |
66 |
@@ -157,8 +159,7 @@ |
67 |
object.__setattr__(self, name, 0) |
68 |
|
69 |
if self._displayed: |
70 |
- self.out.write(self._term_codes['newline']) |
71 |
- self.out.flush() |
72 |
+ self._write(self._term_codes['newline']) |
73 |
self._displayed = False |
74 |
|
75 |
def __setattr__(self, name, value): |