<br><br><div class="gmail_quote">On Thu, Apr 16, 2009 at 12:12 PM, Rüdiger Ranft <span dir="ltr"><_<a href="mailto:rdi_@web.de">rdi_@web.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi all,<br>
<br>
I need to call some programms and catch their stdout and stderr streams.<br>
While the Popen class from subprocess handles the call, I get the<br>
results of the programm not until the programm finishes. Since the<br>
output of the programm is used to generate a progress indicator, I need<br>
a way to acces the values written to stdout/stderr as fast as possible.<br>
<br>
Beneath is a test which shows what I did<br>
<br>
TIA<br>
Rudi<br>
<br>
----8<-------8<-------8<-- iodummy.cpp -8<-------8<---<br>
#include <iostream><br>
#include <unistd.h><br>
<br>
int main()<br>
{<br>
        for( int i = 0; i < 10; i++ )<br>
        {<br>
                std::cerr << i << std::endl;<br>
                sleep(2);<br>
        }<br>
}<br>
<br>
from subprocess import Popen, PIPE<br>
from time import sleep<br>
<br>
p = Popen('./iodummy',stdin=PIPE, stdout=PIPE, stderr=PIPE)<br>
sleep(3)<br>
# now I expect '0\n1\n' in stderr, but read() blocks until<br>
# the end of iodummy.<br>
print p.stderr.read()<br>
p.wait()<br>
<font color="#888888"><br>
--<br>
GPG encrypted mails preferred.<br>
GPG verschlüsselte Mails bevorzugt.<br>
---> <a href="http://chaosradio.ccc.de/media/ds/ds085.pdf" target="_blank">http://chaosradio.ccc.de/media/ds/ds085.pdf</a> Seite 20 <----<br>
<br>
</font><br>--<br>
<a href="http://mail.python.org/mailman/listinfo/python-list" target="_blank">http://mail.python.org/mailman/listinfo/python-list</a><br>
<br></blockquote></div><br><br>Depending on what exactly you're doing (like if you need to send info back to the program you're spawning), the socket module might be of use. I use it to communicate between Perl and Python for some stuff I have to do at work, and it works out rather well.<br>
<br>Specifically, I've found sockets and JSON to work really nicely for inter-language program communication.<br>