Sridhar Ratnakumar <sridh...@activestate.com> added the comment: On Thu, 09 Jul 2009 16:43:49 -0700, Vinay Sajip <rep...@bugs.python.org> wrote:
> Vinay Sajip <vinay_sa...@yahoo.co.uk> added the comment: > >> However, sys.stdout|err can be assigned to some thing else >> (eg: py.test assigning it to an open file object) .. in which case it >> is legitimate to handle (close) such objects (handles) by who >> created it (py.test). > @Sridhar: I disagree. Creation is not ownership. Clearly ownership is > *initially* with the creator, but when a stream is used to initialise a > StreamHandler, ownership of the stream passes to the StreamHandler. Are you suggesting that the ownership of `sys.stderr` belongs to the logging module once logging.basicConfig (that initializes a StreamHandler with stderr) is called? That no other module/library is to close sys.stderr even though they created it (sys.__stderr__ being the backup)? StreamHandler can take ownership of an arbitrary stream (say, created by the caller) passed to it, but assuming ownership of a standard stream, that are free to be overridden by a library (such as py.test), is rather bizarre. > I pointed out in msg90148 > that file-like objects are not guaranteed to have a "closed" attribute, > to which he has not responded. If this bug is acknowledged as a problem, then coming up with a fix is a different issue. I don't know how to detect whether a stream is closed or not .. especially when you say that not all file-like objects have a 'closed' attribute (BTW, which doesn't?), but this is the only solution I know currently: ... # some streams, such as sys.stdout|err, cannot be owned by StreamHandler # they might have been closed by whoever customized it. closed = hasattr(self.stream, 'closed') and self.stream.closed if self.stream and hasattr(self.stream, 'flush') and not closed: self.stream.flush() ... -srid ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue6333> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com