On Tue, Mar 22, 2005 at 02:19:52PM -0700, Earl Eiland wrote: > Well, your program ran successfully. Perhaps WinRK is not well > behaved. How can a process terminate in such a way that poll() can read > it, but wait() won't?
I don't have any idea. Both are implemented in terms of win32event.WaitForSingleObject (which is itself a thin wrapper over the win32 API of the same name[1]), one with a zero timeout and one with an INFINITE timeout. This caveat is in the msdn page on WFSO: Use caution when calling the wait functions and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages. Message broadcasts are sent to all windows in the system. A thread that uses a wait function with no time-out interval may cause the system to become deadlocked. Two examples of code that indirectly creates windows are DDE and the CoInitialize function. Therefore, if you have a thread that creates windows, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than WaitForSingleObject. ... which is pretty much greek to this unix geek. If your Python program has a GUI, can you strip out the gui-related parts to make it a pure commandline program, and see if you still have the problem? You could try something like (untested, obviously) import subprocess if subprocess.mswindows: from win32event import WaitForSingleObject from win32process import GetExitCodeProcess def wait(self): """Wait for child process to terminate. Returns returncode attribute.""" while self.returncode is None: obj = WaitForSingleObject(self._handle, 1000) self.returncode = GetExitCodeProcess(self._handle) _active.remove(self) return self.returncode subprocess.Popen.wait = wait to make the .wait() method call WFSO with a timeout, and then maybe you can simply forget about the weird behavior you ran into. Jeff [1] http://msdn.microsoft.com/library/en-us/dllproc/base/waitforsingleobject.asp
pgpDmLreIsHC0.pgp
Description: PGP signature
-- http://mail.python.org/mailman/listinfo/python-list