Running an interactive subprocess with Popen
norseman
norseman at hughes.net
Fri Apr 10 13:33:49 EDT 2009
David Liang wrote:
> Hello,
> Sorry for the newbie question. How do I run a program that could
> block, waiting for user input, using subprocess.Popen? For example,
>
> from subprocess import *
>
> def foo():
> a = Popen(['python'] ...)
>
> I want to be able to get input from the user and send input to the
> subprocess, printing stdout and stderr as data becomes available, then
> return once the subprocess exits. Is it possible to send to the
> subprocess keyboard interrupts, EOF, and such?
>
> I tried doing stdout=PIPE, stderr=PIPE, stdin=PIPE. I tried using
> communicate(), but could only call it once; subsequent calls raised
> "ValueError: I/O operation on closed file."
> And both a.stdout.read() and a.stderr.read() blocked the program. Any
> help would be much appreciated.
>
> -David
> --
> http://mail.python.org/mailman/listinfo/python-list
>
============================================
David;
Take a look at Section 14.1.2 of the Python Library pdf reference. The
popen3 should interest you. It allows 2 way communication with a
'child' process.
I was going to include some samples, but it seems I took them off when
that project terminated. (So they are buried somewhere in storage - sorry.)
I'm running Ver. 2.5.2 for mass compatibility.
Note:
I never tried redirection of the mouse. Just the keyboard, which
worked very well for me. In my case "Parent" controlled conversation.
In essence, treating 'child' as a subroutine. 'Child' included Unix
scripts, Unix programs, and some third party programs. Try to have
your "parent" program NOT talk to the screen while in this mode. :)
Steve
More information about the Python-list
mailing list