[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] [Emile van Sebille <emile@fenx.com>]
I've possibly narrowed a problem I'm having running zope as a service on winxp pro sp 1 in that when started from a command line as:
c:\zope\v27\lib\python\python.exe \ c:\zope\v27\lib\python\zope\startup\run.py -C \ c:\zope\v27\instance\etc\zope.conf
[tim inserted backslashes above, to make the line structure clear]
it starts up just fine (although now running from the console).
But when I start it with:
c:\zope\v27\lib\python\pythonw.exe \ c:\zope\v27\lib\python\zope\startup\run.py -C \ c:\zope\v27\instance\etc\zope.conf
it dies after about 30 seconds.
It wouldn't surprise me that I'm doing something it doesn't like (I'm spawning additional processes from within a product but it worked fine with 2.5),
It's unclear what "it" means, in "it wworked fine with 2.5". For example, do you mean that the second command line, using pythonw.exe explicitly from a DOS box worked fine, or do you mean that running Zope as a service on XP Pro SP1 worked fine, or ...?
but I'm somewhat at a loss as to debugging it in> that when run as a console app it works fine, but when run windowless it doesn't.
Did you look in your Zope log file(s) for tracebacks?
Do I have to write out check points to a file? or is there some way to use Mark Hammonds process debugging tools? Or is this a bug, known or otherwise?
[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 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).