Re: Repost: Read a running process output

2010-02-05 Thread Nobody
On Fri, 05 Feb 2010 03:57:17 -0800, Ashok Prabhu wrote:

> I very badly need this to work. I have been googling out for a week
> with no significant solution. I open a process p1 which does keeps
> running for 4+ hours. It gives some output in stdout now and then. I
> open this process with subprocess.Popen and redirect the stdout to
> PIPE. However when I read the output with readline it blocks waiting
> forever. I need to read from p1.stdout till what it has in the PIPE.
> Can someone help me out with the exact code change that can accomplish
> the task.
> 
> from subprocess import *
> 
> p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE,shell=True)
> 
> while 1:
> line=p1.stdout.readline()
> print line

The answer is essentially the same one I gave in response to your post
entitled "read a process output with subprocess.Popen" yesterday.

You need to persuade the command to line-buffer its output rather than
block-buffering it. If the command insists on block-buffering, you're out
of luck; there's no way that Python can force it to do otherwise.

You might be able to persuade the command to use line-buffering by using a
pty rather than a pipe for its stdout, although that depends upon
os.openpty() being available on your platform (the documentation only says
"Availability: some flavors of Unix").

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Repost: Read a running process output

2010-02-05 Thread Helmut Jarausch
On 02/05/10 14:39, Ashok Prabhu wrote:
> On Feb 5, 6:33 pm, Ashok Prabhu  wrote:
>> On Feb 5, 5:58 pm, Alain Ketterlin 
>> wrote:
>>
>>
>>
>>> Ashok Prabhu  writes:
>> p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE,shell=True)
>>
> Use Popen(['/usr/...','-d'],stdout=PIPE), i.e., no shell.
>>
> -- Alain.
 Thanks for the response. However it throws an error. Please find
 below.
>>
>>> from subprocess import *
>>> p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE)
>>
>>> You forgot to change the monolithic command into a list of words. Since
>>> you don't use the shell anymore you have to give Popen a pre-parsed
>>> command line.
>>
>>> -- Alain.
>>
>> Here is the error again
>>
> p1=Popen('/usr/sunvts/bin/64/vtsk','-d',stdout=PIPE)
>>
>> Traceback (most recent call last):
>>   File "", line 1, in ?
>>   File "/usr/lib/python2.4/subprocess.py", line 494, in __init__
>> raise TypeError("bufsize must be an integer")
>> TypeError: bufsize must be an integer
>>
>> ~Ashok.
> 
> Oops i missed the braces. But still no output.
> 
> 
 p1=Popen(['/usr/sunvts/bin/64/vtsk','-d'],stdout=PIPE)
 while 1:
> ...  a=p1.stdout.readline()
> ...  print a
> ...

I've tried

#!/usr/bin/python
import subprocess
p1= subprocess.Popen(['/bin/ls','/LOCAL/'],stdout=subprocess.PIPE)
for line in p1.stdout :
  print ">>>",line

which works just fine.

Are you sure, your /usr/sunvts/bin/64/vtsk writes a newline character (readline 
is waiting for that)?

Helmut.

-- 
Helmut Jarausch

Lehrstuhl fuer Numerische Mathematik
RWTH - Aachen University
D 52056 Aachen, Germany
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Repost: Read a running process output

2010-02-05 Thread Ashok Prabhu
On Feb 5, 6:33 pm, Ashok Prabhu  wrote:
> On Feb 5, 5:58 pm, Alain Ketterlin 
> wrote:
>
>
>
> > Ashok Prabhu  writes:
> > >> > p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE,shell=True)
>
> > >> Use Popen(['/usr/...','-d'],stdout=PIPE), i.e., no shell.
>
> > >> -- Alain.
> > > Thanks for the response. However it throws an error. Please find
> > > below.
>
> >  from subprocess import *
> >  p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE)
>
> > You forgot to change the monolithic command into a list of words. Since
> > you don't use the shell anymore you have to give Popen a pre-parsed
> > command line.
>
> > -- Alain.
>
> Here is the error again
>
> >>> p1=Popen('/usr/sunvts/bin/64/vtsk','-d',stdout=PIPE)
>
> Traceback (most recent call last):
>   File "", line 1, in ?
>   File "/usr/lib/python2.4/subprocess.py", line 494, in __init__
>     raise TypeError("bufsize must be an integer")
> TypeError: bufsize must be an integer
>
> ~Ashok.

Oops i missed the braces. But still no output.


>>> p1=Popen(['/usr/sunvts/bin/64/vtsk','-d'],stdout=PIPE)
>>> while 1:
...  a=p1.stdout.readline()
...  print a
...
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Repost: Read a running process output

2010-02-05 Thread Ashok Prabhu
On Feb 5, 5:58 pm, Alain Ketterlin 
wrote:
> Ashok Prabhu  writes:
> >> > p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE,shell=True)
>
> >> Use Popen(['/usr/...','-d'],stdout=PIPE), i.e., no shell.
>
> >> -- Alain.
> > Thanks for the response. However it throws an error. Please find
> > below.
>
>  from subprocess import *
>  p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE)
>
> You forgot to change the monolithic command into a list of words. Since
> you don't use the shell anymore you have to give Popen a pre-parsed
> command line.
>
> -- Alain.

Here is the error again

>>> p1=Popen('/usr/sunvts/bin/64/vtsk','-d',stdout=PIPE)
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/lib/python2.4/subprocess.py", line 494, in __init__
raise TypeError("bufsize must be an integer")
TypeError: bufsize must be an integer


~Ashok.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Repost: Read a running process output

2010-02-05 Thread Alain Ketterlin
Ashok Prabhu  writes:

>> > p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE,shell=True)
>>
>> Use Popen(['/usr/...','-d'],stdout=PIPE), i.e., no shell.
>>
>> -- Alain.

> Thanks for the response. However it throws an error. Please find
> below.
>
 from subprocess import *
 p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE)

You forgot to change the monolithic command into a list of words. Since
you don't use the shell anymore you have to give Popen a pre-parsed
command line.

-- Alain.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Repost: Read a running process output

2010-02-05 Thread Ashok Prabhu
On Feb 5, 5:12 pm, Alain Ketterlin 
wrote:
> Ashok Prabhu  writes:
> > from subprocess import *
> > p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE,shell=True)
>
> Use Popen(['/usr/...','-d'],stdout=PIPE), i.e., no shell.
>
> -- Alain.

Hi Alain,

Thanks for the response. However it throws an error. Please find
below.

>>> from subprocess import *
>>> p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE)
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/lib/python2.4/subprocess.py", line 543, in __init__
errread, errwrite)
  File "/usr/lib/python2.4/subprocess.py", line 975, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

Thanks,
~Ashok.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Repost: Read a running process output

2010-02-05 Thread Alain Ketterlin
Ashok Prabhu  writes:

> from subprocess import *
> p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE,shell=True)

Use Popen(['/usr/...','-d'],stdout=PIPE), i.e., no shell.

-- Alain.
-- 
http://mail.python.org/mailman/listinfo/python-list


Repost: Read a running process output

2010-02-05 Thread Ashok Prabhu
Hi,

I very badly need this to work. I have been googling out for a week
with no significant solution. I open a process p1 which does keeps
running for 4+ hours. It gives some output in stdout now and then. I
open this process with subprocess.Popen and redirect the stdout to
PIPE. However when I read the output with readline it blocks waiting
forever. I need to read from p1.stdout till what it has in the PIPE.
Can someone help me out with the exact code change that can accomplish
the task.

from subprocess import *

p1=Popen('/usr/sunvts/bin/64/vtsk -d',stdout=PIPE,shell=True)

while 1:
line=p1.stdout.readline()
print line

Thanks in advance,
~Ashok.
-- 
http://mail.python.org/mailman/listinfo/python-list