在Perl中读取shell脚本的控制台输出

时间:2011-05-17 10:41:54

标签: perl shell unix console log4perl

假设我有一个名为print_error.sh的shell脚本,如下所示:

#!/usr/bin/bash

echo "ERROR: Bla bla, yada yada."
exit 1

现在我在Perl脚本中,用

调用这个shell脚本
system("print_error.sh")

我现在想要读取print_error.sh的控制台输出并将其写入Log4perl记录器。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:5)

使用反引号:

my $results = `print_error.sh`;

或看到开放:

http://perldoc.perl.org/functions/open.html

答案 1 :(得分:0)

以下是我找到的解决方案:

#!/usr/bin/perl

use Log::Log4perl;

my $logfile = "log.txt";
$ENV{"LOGFILE"} = $logfile;

Log::Log4perl->init("log4perl.properties");
$logger = Log::Log4perl->get_logger();

$logger->info("pos 1");
system("./print_error.sh 0 2>&1 >> $logfile") == 0
        or die "perl error";
$logger->info("pos 2");

exit 0

另见here