in reply to Re^3: Win32 capturing output from a process that may hang
in thread Win32 capturing output from a process that may hang

Also from the docs for run($timeout, $which);...

A true return value means the processes exited normally; a false value means one or more processes was killed with $timeout

so that is not the prob unless the docs have got it base over apex

Cheers,
R.

Pereant, qui ante nos nostra dixerunt!

Replies are listed 'Best First'.
Re^5: Win32 capturing output from a process that may hang
by ZlR (Chaplain) on Mar 02, 2005 at 22:00 UTC
    Ah, but it works like i think it does !

    Here 's tt.pl :

    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" ;
    And here the spawned process :
    #!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++ ; }
    Here is the out.txt file :
    Do the hammerlock Do the hammerlock Do the hammerlock Do the hammerlock Do the hammerlock
    And the err.txt :
    Do the hammerlock you turkeynecks ! Do the hammerlock you turkeynecks ! ... (uh, well, you get it ... )
    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 ...

    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 :)