Perl получает вывод в файл вместе с STDERR и STDOUT - PullRequest
0 голосов
/ 20 марта 2012

В следующей команде я хочу записать вывод в файл, а также получить STDOUT, STDERR в выходной переменной, как я могу это сделать

      my( $output) = `ssh login.com ls /tmp  > filename 2>&1`;
       print "\n=========$output============";

.

Ответы [ 3 ]

2 голосов
/ 20 марта 2012

Разве не более очевидно захватить результат и затем заставить Perl распечатать его в файл?

use strict;
use warnings;

use Capture::Tiny qw/capture_merged/;

open my $log, '>', 'filename';

$|++; #no buffering
my ($result, $status) = capture_merged { system 'ssh login.com ls /tmp' };

print "Result: $result";
print $log $result;
0 голосов
/ 20 марта 2012

Для этого вам, вероятно, следует использовать один из модулей SSH :: * из CPAN.Или вы можете использовать команду оболочки "tee".

my $output = `ssh login.com ls /tmp/ 2>&1 | tee filename`
0 голосов
/ 20 марта 2012

Отследите файл, как только он будет готов.

my ($output) = `ssh login.com ls /tmp/ > filename 2>&1;cat filename`
print "\n=========$output============";

Редактировать: Если важно сохранить код выхода (и я думаю, что ответы в https://stackoverflow.com/a/9784064/1137055 более полные и менее хакерские):

`ssh login.com ls /tmp/ > filename 2>&1`; # run command and output to a file
my $code = $?;
my $output = { local $/ = undef; open FILE, "file" or die "Couldn't open file: $!"; $string = <FILE>; close FILE; } # "slurp" the file in using perl
print "\n=========$output============$code========\n";

Или еще менее идеальное решение:

`ssh login.com ls /tmp/ > filename 2>&1`; # run command and output to a file
my $code = $?;
my $output = `cat filename` # read the file by shell
print "\n=========$output============$code========\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...