On Jun 3, 5:42 pm, Daniel Klein <[EMAIL PROTECTED]> wrote: > On Tue, 3 Jun 2008 14:04:10 -0700 (PDT), [EMAIL PROTECTED] wrote: > >I'm trying to perform following type of operation from inside a python > >script. > >1. Open an application shell (basically a tcl ) > >2. Run some commands on that shell and get outputs from each command > >3. Close the shell > > >I could do it using communicate if I concatenate all my commands > >( separated by newline ) and read all the output in the end. So > >basically I could do following sequence: > >1. command1 \n command2 \n command 3 \n > >2. Read all the output > > >But I want to perform it interactively. > >1. command1 > >2. read output > >3. command2 > >4. read output ...... > > >Following is my code: > > >from subprocess import * > >p2 = Popen('qdl_tcl',stdin=PIPE,stdout=PIPE) > >o,e = p2.communicate(input='qdl_help \n qdl_read \n > >qdl_reg_group_list ') > > >Please suggest a way to perform it interactively with killing the > >process each time I want to communicate with it. > > Use > stdin.write(command + '\n') > to 'send' data to the sub-process. > > Use > stdout.readline() > to 'receive' data from the sub-process. > > But to use this requires you open the subprocess with: > > universal_newlines = True > > It assumes that 'command' will be sent with '\n' and received data will come > in a line at a time. Your Python program needs to know what to expect; you > are in control. > > Alternatively, you can use std.write() and stdout.read() (without > universal_newlines) but this means you need to create your own IPC protocol > (like netstrings). > > Hope this helps, > > Daniel Klein
Hi Daniel, Thanks for your reply.. I've done exactly as you suggested...but I'm still having problem with the read...it just gets stuck in the read ( I think because its a blocking read...) following is a simple example of problem..please try running it ... from subprocess import * p2 = Popen('python',shell=True,stdin=PIPE,stdout=PIPE,universal_newlines=True) for i in range(10): p2.stdin.write('print 10'+'\n') # Write Command o = p2.stdout.readline() # Read Command print o I appreciate all your help... Thanks, -Rahul Dabane. -- http://mail.python.org/mailman/listinfo/python-list