redirect standard output problem
Dave Angel
d at davea.name
Fri Dec 21 09:36:44 EST 2012
On 12/21/2012 12:23 AM, iMath wrote:
> redirect standard output problem
>
> why the result only print A but leave out 888 ?
>
> import sys
> class RedirectStdoutTo:
>
> def __init__(self, out_new):
> self.out_new = out_new
> def __enter__(self):
> sys.stdout = self.out_new
> def __exit__(self, *args):
> sys.stdout = sys.__stdout__
Just a comment. It'd be better to save and restore the stdout value,
rather than restoring it to what it was at begin of process.
Quoting from
http://docs.python.org/3.3/library/sys.html?highlight=__stdout__#sys.__stdout__
It can also be used to restore the actual files to known working file
objects in case they have been overwritten with a broken object.
However, the preferred way to do this is to explicitly save the previous
stream before replacing it, and restore the saved object.
My reasoning is that some function further up the stack may also be
using a similar (or identical) redirection technique. Anyway, instead
of using __stdout__, I'd use a saved value inside your object.
def __init__(self, out_new):
self.out_new = out_new
def __enter__(self):
self.savedstate = sys.stdout
sys.stdout = self.out_new
def __exit__(self, *args):
sys.stdout = self.savedstate
This may or may not solve your problem (I'd suspect that flush() is the
right answer), but I still think it's worth doing.
--
DaveA
More information about the Python-list
mailing list