How to print stdout before writing stdin using subprocess module in Python?

Peter Otten __peter__ at web.de
Mon Jul 23 15:38:00 CEST 2012


Sarbjit singh wrote:

> I am writing a script in which in the external system command may
> sometimes require user input. I am not able to handle that properly. I
> have tried using os.popen4 and subprocess module but could not achieve the
> desired behavior.
> 
> Below mentioned example would show this problem using "cp" command. ("cp"
> command is used to show this problem, i am calling some different exe
> which may similarly prompt for user response in some scenarios). In this
> example there are two files present on disk and when user tries to copy
> file1 to file2, an conformer message comes up.
> 
> proc = subprocess.Popen("cp -i a.txt b.txt", shell=True,
> stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,)
> stdout_val, stderr_val = proc.communicate() print stdout_val b.txt?
> 
> proc.communicate("y")
> 
> Now in this example if i read only stdout/stderr and prints it, later on
> if i try to write "y" or "n" based on user's input, i got an error that
> channel is closed. Can some one please help me on achieving this behavior
> in python such that i can print stdout first, then should take user input
> and write stdin later on.

I think you need something like expect:

http://pypi.python.org/pypi/pexpect




More information about the Python-list mailing list