Hello All,
I'm having issues capturing the output from a program while using
threading. Program runs ok when I run without threading. Here's my
Python code and the Java class that is called by it.
Python :
#!/usr/bin/python
import popen2
import threading
for id in range( 10 ) :
( err_out, stdin ) = popen2.popen4( ( '/usr/bin/java JavaTest
%s' ) % ( id ) )
for line in err_out.readlines() :
print line,
def test( id ) :
print "Called %s" % ( id )
( err_out, stdin ) = popen2.popen4( ( '/usr/bin/java JavaTest
%s' ) % ( id ) )
for line in err_out.readlines() :
print line,
#for id in range( 10 ) :
# thread = threading.Thread( target=test, args=( [ id ] ) )
# thread.start()
Java :
import java.util.Date;
public class JavaTest {
public static void main( String args[] ) {
System.out.println( args[0] + " - " + new
Date().toString() );
}
}
When I run without threading, I get the correct output :
0 - Tue Jul 12 11:33:51 EDT 2005
1 - Tue Jul 12 11:33:52 EDT 2005
2 - Tue Jul 12 11:33:52 EDT 2005
3 - Tue Jul 12 11:33:53 EDT 2005
4 - Tue Jul 12 11:33:53 EDT 2005
5 - Tue Jul 12 11:33:54 EDT 2005
6 - Tue Jul 12 11:33:54 EDT 2005
7 - Tue Jul 12 11:33:54 EDT 2005
8 - Tue Jul 12 11:33:54 EDT 2005
9 - Tue Jul 12 11:33:54 EDT 2005
When I uncomment the threading section and run again, I see that the
function is called, but the result from the Java code does not get
printed :
Called 0
Called 1
Called 2
Called 3
Called 4
Called 5
Called 6
Called 7
Called 8
Called 9
I hope this is just a nuance that I've run across and it's an easy
solution ... any advice pointing me in the right direction would be
greatly appreciated.
Thanks