Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

eg/Runner.pm works with other open3()-like things. Very nice!

  • Loading branch information...
commit 0a497450b346210b6bfb2bf8b8c6c920314c39d3 1 parent 56ac1a4
Rocco Caputo authored
Showing with 79 additions and 0 deletions.
  1. +79 −0 eg/eg-19-net-ssh.pl
79 eg/eg-19-net-ssh.pl
View
@@ -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;
Please sign in to comment.
Something went wrong with that request. Please try again.