perl与STDERR和STDOUT一起在文件中输出

时间:2012-03-20 09:39:41

标签: linux perl

在以下命令中,我想将输出写入文件,并在输出变量中获取STDOUT,STDERR,我该怎么做

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

3 个答案:

答案 0 :(得分:2)

捕获结果然后将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;

答案 1 :(得分:0)

一旦完成就抓住文件。

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

编辑:如果保留退出代码很重要(我认为https://stackoverflow.com/a/9784064/1137055中的答案更完整,更少hacky):

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

答案 2 :(得分:0)

您应该使用CPAN中的一个SSH :: *模块来执行此操作。或者您可以使用“tee”shell命令。

my $output = `ssh login.com ls /tmp/ 2>&1 | tee filename`