Message 262456 - Python tracker (original) (raw)
Serhiy Storchaka added the comment:
- Is there a reason only name is closed, not dunder_name? (Josh's question, but I'm interesting too).
By default, sys.stdout is sys.stdout. Is it ok to close the same file twice?
- Is it worth to first replace standard streams with "standard printers", and then close original streams? This allows to log warnings from closing streams.
Yeah, I tried this locally after sending my patch. I think that we should keep a strong reference and only "decref" after the stream is replaced.
- "standard printers" are used at startup and at shutdown. Can we reuse some code? Or save and reuse "standard printers"?
I will check, it's maybe possible to share some code inside pylifecycle.c.
- Daemons close standard streams and fileno(stdout) can return unrelevant value. Perhaps it is not good idea to recreate closed stdout.
Ah yes, while playing with my patch, I noticed that I replaced stdout even if sys.stdout was NULL or None.
Closed stdout is a different thing. I guess that we can try to call stdout.closed() and only replaced it with a standard printer it closed() returns True (don't do it on error nor if closed() returns false).