Now that's quite a bit different and seems to make more sense. I am now able to get the output I desire but there appears to be some random characters that are printed with the first line. I assume that it'll wait for the process to complete before the shutdown call is made? Or is waitpid needed?
Also, I was checking $fh against $out and $err before (see OP), I don't really seem to have that option now. What can I do to compensate or should I not bother?
sub sys { my $self = shift; my $app = shift; more(); TRACE "sys > $app @_"; my($pid, $sock) = Win32::Socketpair::winopen2_5($app, @_) or LOGDIE "f +ailed to open $app: @_"; shutdown $sock, 1; my ($sel, $buf); $sel = new IO::Select($sock); SYSLOOP: while(my @ready = $sel->can_read) { foreach my $fh (@ready) { my $line = <$fh>; if(not defined $line) { $sel->remove($fh); next; } $buf .= $line; } } waitpid($pid, 0); close $sock; less(); return $buf; }
In reply to Re^4: Open3 and IO:Select on Win32
by Elegant
in thread Open3 and IO:Select on Win32
by Elegant
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |