"Tim Peters" <tim@zope.com> writes:
[moving this from comp.lang.python to zope-dev; it really belongs on a Zope list, although schemes to change what pythonw does probably belong on python-dev]
[I'm currently reading python-list via the gmane nntp interface, I don't know whether there really is a gmane.comp.web.zope.devel newsgroup]
[Thomas Heller]
It has been reported that writing to the original sys.stdout (and maybe also sys.stderr) sooner or later raises an IOError when running pythonw.exe, unless these are redirected. Could this be the problem?
It could, although I have no idea what WinXP does (and don't have access to XP). Here's a Python program to try:
""" import sys if 1: # edit to 1 for stdout, 0 for stderr console = sys.stdout else: console = sys.stderr
import traceback tb = file('tb.txt', 'w')
try: i = 0 while True: i += 1 console.write('.') except: print >> tb, "Died when trying to write byte", i traceback.print_exc(file=tb) tb.close() """
Under Win98SE, and regardless of whether it writes to stdout or stderr, it dies when run under pythonw, and tb.txt contains this after:
Died when trying to write byte 4097 Traceback (most recent call last): File "wr.py", line 14, in ? console.write('.') IOError: [Errno 9] Bad file descriptor
I get exactly the same, on Win XP Pro, both for sys.stdout and sys.stderr.
The point of pythonw.exe is that no console is created or inherited, and the default stdin, stdout and stderr provided by MS C in that case are unusable (although the output flavors can appear to be usable until some secret MS limit is exceeded -- at least under Win98SE).
Since it seems XP shows the same behaviour than win98SE, has the behaviour of Python changed? Were IOErrors ignored on sys.stdout or sys.stderr in earlier versions? IIRC, /F first proposed that pythonw.exe should create a console to have a place to show tracebacks. Sounds like a good idea to me. Thomas