2016-03-09 3 views
0

Используя Perl's Net::SSH::Except, существует метод под названием read_line, который позволяет мне читать каждую строку вывода.Как вы читаете каждую строку вывода с использованием OpenSSH Perl

Я хочу использовать Net::OpenSSH, но я не могу найти ничего подобного.

Как вы это можете написать SSH::Except используя OpenSSH?

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

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

Я думаю, что вы, вероятно, имели в виду [Net :: SSH :: Expect] (http://metacpan.org/модуль/Net :: SSH :: Expect)? Вы всегда должны * скопировать * свой код и данные в вопрос – Borodin

+0

Справедливая точка. Было больше указателя, чем решение –

+0

@ChrisDoyle: Если вы считаете, что у вас есть решение, отправьте его. Комментарии не являются местом для выписок или речитаций. Кроме того, в каком модуле вы говорите? Насколько я вижу, нет ничего подобного в [POD для 'Net :: OpenSSH'] (http://metacpan.org/module/Net::OpenSSH) и' Net :: SSH :: Except' не существует – Borodin

ответ

4

Модуль Net :: OpenSSH обеспечивает метод захвата, который будет захватывать весь вывод. При вызове в контексте списка возвращает выходную линию по линии

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"; 
} 

дает выходной сигнал

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 ..