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 -- http://mail.python.org/mailman/listinfo/python-list