【问题标题】:Read console output of a shell script in Perl在 Perl 中读取 shell 脚本的控制台输出
【发布时间】:2011-05-17 10:41:54
【问题描述】:

假设我有一个名为 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 记录器。

我怎样才能做到这一点?

【问题讨论】:

  • 不要跑题,但是直接在perl中打印错误不是更容易吗?还是在perl中写print_error.shprint_error.pl)和require呢?使用外部命令来做 perl 做得更好的事情是没有意义的。

标签: perl shell unix console log4perl


【解决方案1】:

要么使用反引号:

my $results = `print_error.sh`;

或查看打开:

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

【讨论】:

  • 我能不能用反引号得到shell脚本的退出代码?
  • 检查$?的值:my $retval = $?
  • 另外,请注意 qx 运算符。 my $results = qx( print_error.sh ) 为什么 print_error.sh 写入标准输出而不是标准错误?
【解决方案2】:

这是我找到的解决方案:

#!/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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多