Re: How to read stdout from subprocess as it is being produced

2008-12-21 Thread Alex
On Dec 19, 5:09 pm, Albert Hopkins  wrote:
> On Fri, 2008-12-19 at 06:34 -0800, Alex wrote:
> > Hi,
>
> > I have a Pyhon GUI application that launches subprocess.
> > I would like to read the subprocess' stdout as it is being produced
> > (show it in GUI), without hanging the GUI.
>
> > I guess threading will solve the no-hanging issue, but as far as I
> > searched for now, I've only seen how to read the stdout after
> > subprocess is finished.
>
> I believe that's going to be highly dependent upon the particular, yet
> unspecified, GUI toolkit/API.
>
> There are probably a few ways. You're toolkit might native support for
> this, but one way would be to use a timer.  Here is some pseudocode:
>
> class MyWindow(toolkit.Window):
>     def __init__(self, ...):
>         ...
>         self.subprocess = subprocess.Popen(..., stdout=subprocess.PIPE)
>         self.running = True
>
>         ...
>         toolkit.set_timeout(TIMEOUT_VAL, self.read_stdout)
>
>     def read_stdout(self, ...):
>         if not self.running:
>             return
>         char = self.subprocess.stdout.read(1)
>         if char == '':
>             self.running = False
>             return
>         self.update_something(char)
>         toolkit.set_timeout(TIMEOUT_VAL, self.read_stdout)

Hi,

Thanks a lot for the tip!

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


Re: How to read stdout from subprocess as it is being produced

2008-12-19 Thread Albert Hopkins
On Fri, 2008-12-19 at 06:34 -0800, Alex wrote:
> Hi,
> 
> I have a Pyhon GUI application that launches subprocess.
> I would like to read the subprocess' stdout as it is being produced
> (show it in GUI), without hanging the GUI.
> 
> I guess threading will solve the no-hanging issue, but as far as I
> searched for now, I've only seen how to read the stdout after
> subprocess is finished.
> 

I believe that's going to be highly dependent upon the particular, yet
unspecified, GUI toolkit/API.

There are probably a few ways. You're toolkit might native support for
this, but one way would be to use a timer.  Here is some pseudocode:

class MyWindow(toolkit.Window):
def __init__(self, ...):
...
self.subprocess = subprocess.Popen(..., stdout=subprocess.PIPE)
self.running = True

...
toolkit.set_timeout(TIMEOUT_VAL, self.read_stdout)

def read_stdout(self, ...):
if not self.running:
return
char = self.subprocess.stdout.read(1)
if char == '':
self.running = False
return
self.update_something(char)
toolkit.set_timeout(TIMEOUT_VAL, self.read_stdout)


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


Re: How to read stdout from subprocess as it is being produced

2008-12-19 Thread anthony . tolle
On Dec 19, 9:34 am, Alex  wrote:
> Hi,
>
> I have a Pyhon GUI application that launches subprocess.
> I would like to read the subprocess' stdout as it is being produced
> (show it in GUI), without hanging the GUI.
>
> I guess threading will solve the no-hanging issue, but as far as I
> searched for now, I've only seen how to read the stdout after
> subprocess is finished.
>
> Thanks!

If I'm interpreting your needs correctly, then you may find this
module helpful:

http://code.activestate.com/recipes/440554/

I've used it successfully in the past when I wanted to use native
python code (no C extensions necessary) for asynchronous reading from
a child process.

I'm not sure if later versions of Python (2.6, 3.0) support this in
the standard library.  I haven't researched it.
--
http://mail.python.org/mailman/listinfo/python-list


How to read stdout from subprocess as it is being produced

2008-12-19 Thread Alex
Hi,

I have a Pyhon GUI application that launches subprocess.
I would like to read the subprocess' stdout as it is being produced
(show it in GUI), without hanging the GUI.

I guess threading will solve the no-hanging issue, but as far as I
searched for now, I've only seen how to read the stdout after
subprocess is finished.

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