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

Reply via email to