Terry J. Reedy <tjre...@udel.edu> added the comment:

Eli, nice detective work. What I understand is that there was a latent 
platform-dependent buglet that presumably got exposed by a recent change in 
process handling, as Ned suggested.

idlelib/PyShell.py, class ModifiedInterpreter(InteractiveInterpreter) has
    def spawn_subprocess(self):
        if self.subprocess_arglist is None:
            self.subprocess_arglist = self.build_subprocess_arglist()
        args = self.subprocess_arglist
        self.rpcpid = os.spawnv(os.P_NOWAIT, sys.executable, args)

so IDLE expects the return to always be a pid which it is not.

Spawn_subprocess is called in both start_subprocess and restart_subprocess. 
Both now leave zombies on exit. I presume idlelib.run.main listens on the 
passed in port (in args) to make the connection. It appears to me that restart 
reuses the socket wrapped in self.rpcclt (rpc client).

Using subprocess.Popen seems like an good idea. The subprocess module is 
explicitly intended to replace low-level, fragile, difficult to get right, 
usage of os.spawn* and similar. If it does not work for this problem, *it* 
should be fixed.

On the other hand, IDLE uses sockets rather than pipes to communicate with 
subproccesses, perhaps because Windows pipes either are or were not as usable 
as unix pipes. Also, named or reusable pipes may not be usiversally available, 
so wrapping a pipe instead of a socket would, it seems to me, take more than 
simple replacement of spawnv by Popen.

Kurt, what do you think about possible fixes to this bug (critical for using 
IDLE on Windows)?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue12540>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to