Skip to content

Commit

Permalink
eg/Runner.pm works with other open3()-like things. Very nice!
Browse files Browse the repository at this point in the history
  • Loading branch information
rcaputo committed Sep 15, 2011
1 parent 56ac1a4 commit 0a49745
Showing 1 changed file with 79 additions and 0 deletions.
79 changes: 79 additions & 0 deletions eg/eg-19-net-ssh.pl
@@ -0,0 +1,79 @@
#!/usr/bin/perl
# vim: ts=2 sw=2 noexpandtab

# Demonstrate Runner.pm used with other open3-like things.

use warnings;
use strict;
use lib qw(../lib);

use Runner;

my $cmd = q(
perl -MTime::HiRes=sleep -wle '
$| = 1;
for (1..3) { $_ = qq[pid($$) moo($_)]; print; warn "$_\n"; sleep rand; }
'
);

sub my_start {
my ($host, $cmd) = @_;

use Net::SSH qw(sshopen3);
use Symbol qw(gensym);

my ($fh_in, $fh_out, $fh_err) = (gensym(), gensym(), gensym());

my $pid = sshopen3($host, $fh_in, $fh_out, $fh_err, $cmd);

return($pid, $fh_in, $fh_out, $fh_err);
}

my $runner_1;
{
my ($pid, $fh_in, $fh_out, $fh_err) = my_start('remote.example.com', $cmd);

$runner_1 = Runner->new(
stdin => $fh_in,
stdout => $fh_out,
stderr => $fh_err,
pid => $pid,

on_stdout_closed => sub { print "runner_1 stdout closed\n" },
on_stderr_closed => sub { print "runner_1 stderr closed\n" },
on_stdout_data => sub { print "runner_1 stdout: $_[1]{data}" },
on_stderr_data => sub { print "runner_1 stderr: $_[1]{data}" },

on_exit => sub {
my ($self, $args) = @_;
warn "runner_1 child $args->{pid} exited: $args->{exit}\n";
$runner_1 = undef;
},
);
}

my $runner_2;
{
my ($pid, $fh_in, $fh_out, $fh_err) = my_start('remote.example.com', $cmd);

$runner_2 = Runner->new(
stdin => $fh_in,
stdout => $fh_out,
stderr => $fh_err,
pid => $pid,

on_stdout_closed => sub { print "runner_2 stdout closed\n" },
on_stderr_closed => sub { print "runner_2 stderr closed\n" },
on_stdout_data => sub { print "runner_2 stdout: $_[1]{data}" },
on_stderr_data => sub { print "runner_2 stderr: $_[1]{data}" },

on_exit => sub {
my ($self, $args) = @_;
warn "runner_2 child $args->{pid} exited: $args->{exit}\n";
$runner_2 = undef;
},
);
}

Reflex->run_all();
exit;

0 comments on commit 0a49745

Please sign in to comment.