How to read stdout from subprocess as it is being produced
Albert Hopkins
marduk at letterboxes.org
Fri Dec 19 10:09:13 EST 2008
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)
More information about the Python-list
mailing list