2016-03-09 5 views
0

de Perl En utilisant le Net::SSH::Except de Perl, il y a une méthode appelée read_line qui me permet de lire chaque ligne de la sortie. Je veux utiliser Net::OpenSSH mais je ne trouve rien de semblable. Comment écrire cette méthode SSH::Except en utilisant OpenSSH?Comment lire chaque ligne de la sortie à l'aide de OpenSSH

$ssh->send("ls\r\n"); 

while (defined($line = $ssh->read_line()) { 
    # do something 
} 
+1

Je pense que vous voulez dire probablement [Net :: SSH :: Attendez-vous] (http://metacpan.org/module/Net :: SSH :: Expect)? Vous devez toujours * copier * votre code et vos données dans une question – Borodin

+0

Fair point. Était plus d'un pointeur que d'une solution –

+0

@ChrisDoyle: Si vous pensez avoir une solution alors s'il vous plaît le poster. Les commentaires ne sont pas le lieu pour des extraits ou des récitations. De plus, de quel module parlez-vous? Pour autant que je puisse voir, il n'y a rien de tel dans le [POD pour 'Net :: OpenSSH'] (http://metacpan.org/module/Net::OpenSSH), et' Net :: SSH :: Except' n'existe pas – Borodin

Répondre

4

Le module Net :: OpenSSH fournit une méthode de capture qui capture toute la sortie. Si elle est appelée dans le contexte de la liste renverra la ligne de sortie par ligne

use strict; 
use warnings; 
use Net::OpenSSH; 

my $host = "localhost"; 
my %opts = (
     user => 'cdoyle', 
     password => 'thisisnottherealpassword', 
); 
my $ssh = Net::OpenSSH->new($host, %opts); 
my @output = $ssh->capture('ls -lrta'); 

my $count=0; 
foreach my $line (@output){ 
     $count++; 
     print "line $count $line"; 
} 

donne la sortie

line 1 total 28 
line 2 -rw------- 1 cdoyle users 73 Jun 11 2015 .Xauthority 
line 3 -rw------- 1 cdoyle users 602 Jun 11 2015 .viminfo 
line 4 -rw-r--r-- 1 cdoyle users 32 Jun 11 2015 .profile 
line 5 drwxr-xr-x 2 cdoyle users 4096 Jun 11 2015 . 
line 6 -rw------- 1 cdoyle users 682 Aug 20 2015 .sh_history 
line 7 drwxr-xr-x 32 root root 4096 Feb 21 02:33 ..