help needed in subprocess communicate
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 /home/rokit/
svnproject/falcon/chip/blocks/intf/bitsif/rtl/m6_bitsif.qdl_cpp \n
qdl_reg_group_list m6_bitsif')
Please suggest a way to perform it interactively with killing the
process each time I want to communicate with it.
Thanks in advance,
-Rahul.
--
http://mail.python.org/mailman/listinfo/python-list
Help need with subprocess communicate
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.
Thanks in advance,
-Rahul.
--
http://mail.python.org/mailman/listinfo/python-list
Re: Help need with subprocess communicate
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
How to perform a nonblocking read from a process
Hi,
I'm trying to perform following operation from inside the python
script
1. Open a shell ( start a process )
2. Send command1 to the process
3. Get output from the process
4. Send command2 to the process
5. Get output from the process
..
Following is sample code :
from subprocess import *
p2 = Popen('python',stdin=PIPE,stdout=PIPE,universal_newlines=True)
for i in range(10):
p2.stdin.write('print 10'+'\n')
o,e = p2.stdout.readline()
print o,e
It seems that stdout.readline() is a blocking read and it just gets
stuck their..
How to fix this ..
All the help is appreciated ..
Thanks,
-Rahul.
--
http://mail.python.org/mailman/listinfo/python-list
Re: How to perform a nonblocking read from a process
On Jun 3, 7:53 pm, sturlamolden <[EMAIL PROTECTED]> wrote: > On Jun 4, 3:20 am, [EMAIL PROTECTED] wrote: > > > It seems that stdout.readline() is a blocking read and it just gets > > stuck their.. > > How to fix this .. > > Threads are the simplest remedy for blocking i/o. > Threads are the simplest remedy for blocking i/o. I've to admit I'm a newbie to this kind of programming... what if I have to run thousands of these commands...it doesn't make sense to create thousands of threads.. Is there a way that above mentioned piece of code be made to worked... -- http://mail.python.org/mailman/listinfo/python-list
Re: Help need with subprocess communicate
On Jun 3, 11:23 pm, Dennis Lee Bieber <[EMAIL PROTECTED]> wrote: > On Tue, 3 Jun 2008 18:04:40 -0700 (PDT), [EMAIL PROTECTED] declaimed the > following in comp.lang.python: > > > > > 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...) > > And it is likely blocking because the subprocess is doing buffered > output -- ie, nothing is available to be read because the output has not > been flushed. > > This is a problem with most programs when run as a subprocess -- it > is common for stdout, when routed to a pipe or file, to behave as a > buffered stream that only flushes when some x-bytes have been written; > unlike stdout to a console which gets flushed on each new-line. > -- > WulfraedDennis Lee Bieber KD6MOG > [EMAIL PROTECTED] [EMAIL PROTECTED] > HTTP://wlfraed.home.netcom.com/ > (Bestiaria Support Staff: [EMAIL PROTECTED]) > HTTP://www.bestiaria.com/ Is there way to configure the stdout buffer size so that it flushes earlier.. Is there a way to make above mentioned piece code working? -- http://mail.python.org/mailman/listinfo/python-list
