Hi folks, I've seen the following issue come up in multiple posts to this mailing list:
I have a python program that spawns a child process with popen or popen2 or popen3 or popen2.popen2 etc. the child process is interactive: it asks for input then spits out some output, asks for more input then spits out some output. for example, consider the trivial child program: print "welcome" print ">", s=raw_input() while s!='exit': print "you entered:",s print ">", s=raw_input() Now I may be completely wrong about this (I did play with popen for a very long time before writing this message), but it appears that none of the popen variants allow for a sequence of reads and writes to/from this child. that is, if I read from the open pipe's output I will never be able to write the input for the child because the parent program will block on read until eof (I will have similar blocking problems if I start with write - using readline does not seem to help). the standard proposed remedy I have seen on this list is to use Unix- only select/fctl, or otherwise dig into the bowls of the win32 api, or download some half-complete sourceforge process control project. All well and good, but unsatisfying for writing platform independent code. it turns out that there is at least one open source multi-platform (read: win32/linux) api that does handle synchronous I/O with the child: wxWidgets and wxPython using the class wxProcess. Now the wxWidgets implementation is far from perfect, but it at least allows a program to test for new input on the child's stdout and read stdout/ write stdout in a non-blocking way. However, I find it frustrating that I have to import wx just to have useable interactive pipes in my python scripts when I would expect this to be part of the native python implementation. Anybody have any thoughts on this? Do I have my story straight? (the popen variants can't handle this case and there are no other alternatives in the standard python distro) Is there some place I can submit this as a feature request? (Python dev?) -- http://mail.python.org/mailman/listinfo/python-list