On Aug 6, 9:57 am, "J. Cliff Dyer" <j...@sdf.lonestar.org> wrote:
> "Joshua Russo" <josh.r.ru...@gmail.com> wrote:
> >On Thu, Aug 5, 2010 at 10:53 PM, Steve Holden <holden...@gmail.com> wrote:
>
> >> On 8/5/2010 7:16 PM, Joshua Russo wrote:
> >> > On Aug 4, 6:49 pm, Hassan <hsn.zam...@gmail.com> wrote:
> >> >>> Ok, so it appears that (in Python 2.5 at least) there is no way to
> >> capture
> >> >>> the stdout of subprocess.Popen()
>
> >> >> just do this
>
> >> >> from subprocess import Popen, PIPE
> >> >> p = Popen([cmd], stdout=PIPE)
> >> >> p.stdout.readlines()
>
> >> >> thats it!
>
> >> > The problem is that it waits for the process to end to output
> >> > anything. Unless I was doing something wrong, but I think I was doing
> >> > just what you describe here.
>
> >> Well, readlines() inherently has to see the end of the data stream
> >> before it can return a list of all the lines that the data stream
> >> contains, so that's hardly surprising is it?
>
> >> Try using readline() in a loop and see if that gives you better results.
> >> I don't guarantee it will, but at least you will have some chance if
> >> subprocess.open() *isn't* buffering the whole stream.
>
> >> regards
> >>  Steve
>
> >Tried that too and even putting the reading of them in their own thread as
> >someone else suggested on Stackoverflow. I just can't find anyway to capture
> >stdout in real-time from Popen. The problem is that everything uses
> >readline() that buffers the output.
>
> >http://stackoverflow.com/questions/874815/how-do-i-get-real-time-info...
> >http://stackoverflow.com/questions/2082850/real-time-subprocess-popen...
>
> >The way I got it to work with out Popen is to use a text box control as the
> >stdout object. This works great, utilizing the object's write() method.
>
> >The problem with Popen is that it expects the stdout object to have a
> >fileno() method also, which the text box control does not have. So I tried
> >extending the text box to add the fileno() and had it return 1 like the
> >standard stdout, but still no dice. I didn't let the process (unit tests)
> >finish but it definitely was not giving real time output, through it did
> >accept the control with the fileno() method added. It really seems like that
> >should have worked and I may have been able to dig further into Popen to
> >make it work but I figured that I had spent too much time on it as it was.
>
> >If anybody has more suggestions I'd love to hear them.
>
> >--
> >You received this message because you are subscribed to the Google Groups 
> >"Django users" group.
> >To post to this group, send email to django-us...@googlegroups.com.
> >To unsubscribe from this group, send email to 
> >django-users+unsubscr...@googlegroups.com.
> >For more options, visit this group 
> >athttp://groups.google.com/group/django-users?hl=en.
>
> If I understand your issue correctly, in ran into something similar a while 
> back. The problem is not in subprocess, but in how stdout works.  The output 
> is buffered by default, so it only gets written on a line-by-line basis.
>
> If you want to catch it one character at a time, you have to explicitly flush 
> the output after each character using sys.stdout.flush().  Then, of course, 
> you'll also have to read it from subprocess one character at a time, too,
> using .read(1) instead of .readline()
>
> I hope that addresses your issue.
>
> Cheers,
> Cliff

Thanks for the tip, I'll check it out.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to