in reply to Re^4: Win32 capturing output from a process that may hang
in thread Win32 capturing output from a process that may hang
Here 's tt.pl :
And here the spawned process :use strict ; use warnings; use Win32::Job ; my $job = Win32::Job->new; my $tmout = 20 ; my %opt = ( stdout => 'out.txt' , stderr => 'err.txt' ) ; $job -> spawn ( 'c:/perl/bin/perl.exe', 'perl sp.pl',\%opt) ; my $ok=$job->run($tmout, 0) ; $ok ? print "ended before $tmout sec" : print "had to kill it" ;
Here is the out.txt file :#!perl use warnings; use strict ; select STDERR ; $|=0 ; select STDOUT ; $|=0 ; my $i = 0 ; while ($i < 5 ) { print STDOUT "Do the hammerlock\n" ; print STDERR "Do the hammerlock you turkeynecks !\n" ; sleep 2; $i++ ; }
And the err.txt :Do the hammerlock Do the hammerlock Do the hammerlock Do the hammerlock Do the hammerlock
With your example it needs print \"ran ok\" and the full path to the perl binary, but test.out is still empty, i can't figure out why ... Something lame with the windows command line, maybe ...Do the hammerlock you turkeynecks ! Do the hammerlock you turkeynecks ! ... (uh, well, you get it ... )
Anyway Win32::Job does it, as the above example shows, and without much of hassle. It gives you the handler feature if you need it and "job" control and all other windows gimmicks.
zlr
well, now let's try to understand this other use threads heavy wizardry stuff :)
|
---|