Ulrich Eckhardt <ulrich.eckha...@dominolaser.com> writes: > Am 05.02.2013 01:09, schrieb Jabba Laci:
>> setting the sys.stdout back to the original value doesn't work. > [...] >> The problem is in __exit__ when sys.stdout is pointed to the old >> value. sys.stdout.write doesn't work from then on. Output: >> >> .....close failed in file object destructor: >> sys.excepthook is missing >> lost sys.stderr > > Argh! Yes, the newly-created file object takes ownership of the > filedescriptor. Once done with it, it invokes close() on it, making it > unusable for the original sys.stdout. That can be solved with a dup. import os, sys class Unbuff(object): def __enter__(self): sys.stdout.flush() self.stdout_bak = sys.stdout sys.stdout = os.fdopen(os.dup(sys.stdout.fileno()), 'w', 0) def __exit__(self, exc_type, exc_val, exc_tb): sys.stdout = self.stdout_bak -- Piet van Oostrum <p...@vanoostrum.org> WWW: http://pietvanoostrum.com/ PGP key: [8DAE142BE17999C4] -- http://mail.python.org/mailman/listinfo/python-list