in reply to Re: Capture STDOUT and send to screen with open3
in thread Capture STDOUT and send to screen with open3

I am currently trying to work out how to do it with IPC::Run and having trouble. Could you provide a code snipit of how to accomplish? The closest example I have right now is how to duplicate IPC::Open3

  • Comment on Re^2: Capture STDOUT and send to screen with open3

Replies are listed 'Best First'.
Re^3: Capture STDOUT and send to screen with open3 (updated)
by haukex (Archbishop) on Mar 05, 2018 at 17:23 UTC
    Could you provide a code snipit of how to accomplish?

    Something like this maybe?

    Update: Now with STDERR support.

    use warnings; use strict; use IPC::Run qw/ run new_chunker /; my @cmd = ('yourcommand', 'arg1', 'arg2'); my (@out,@err); run \@cmd, '>', new_chunker("\n"), sub { my $line = shift; print $line; push @out, $line; }, '2>', new_chunker("\n"), sub { my $line = shift; print STDERR $line; push @err, $line; } or die $?;

      I am sorry, I am trying it and it hangs. Here is what I am executing: What am I doing wrong? Also, will this print a line real time from cat as if output were not being captured?

      my @cat = qw( cat ); run \@cat, '<pipe', \*PIPE, '>', new_chunker("\n"), sub { my $line = shift; print $line; push @out, $line; }, '2>', new_chunker("\n"), sub { my $line = shift; print STDERR $line; push @err, $line; } or die $?; print PIPE "some input\n"; close PIPE; print "out @out"; print "err @err";

        IPC::Run's run basically runs a command to completion, if you want interactive communication with the subprocess, as your code example appears to be showing, you'll want its start/pump/finish interface. The module's documentation is a bit long, but it is a powerful module, so I recommend reading up on it. Also, a more detailed description of what this subprocess is and what you want to communicate to it would be helpful.

        Otherwise, if all you want to do is send a single string to its STDIN, then I think you should just be able to do run \@cmd, '<', \$data, ....