in reply to Re: using Net::OpenSSH in a MCE worker thread
in thread using Net::OpenSSH in a MCE worker thread

Hi all,

MCE has gone through several revisions since the time the OP tested this. I tested without IO::Pty on my box. Amazingly, running (yum install perl-Net-OpenSSH) installed the package without checking the perl-IO-Tty dependency.

Workers in older MCE revisions closed STDOUT/STDERR prior to exiting. That was fix some time back.

$ ./mce_openssh.pl child(1): doing ssh unable to load Perl module IO::Pty: Can't locate IO/Pty.pm in @INC (@I +NC contains: /media/psf/shm/trunk/examples/../lib /usr/local/lib64/pe +rl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/pe +rl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 10) lin +e 1, <__ANONIO__> line 2. at /usr/share/perl5/vendor_perl/Net/OpenSSH.pm line 756.

Btw, the script works after installing IO::Tty (yum install perl-IO-Pty).

my $sshuser = 'remote_userid'; my $sshpwd = 'remote_passwd'; my $device = 'remote_device'; use MCE::Flow max_workers => 1; use Net::OpenSSH; mce_flow sub { my $wid = MCE->wid; MCE->sendto('stdout', "child($wid): doing ssh\n"); my $ssh = Net::OpenSSH->new( $device, user => $sshuser, passwd => $sshpwd, master_opts => [-o => "StrictHostKeyChecking=no"], master_stderr_discard => 1 ); MCE->sendto('stdout', "child($wid): did ssh - not shown!!! \n"); };

In summary, STDERR output is no longer lost with current MCE releases.