在Perl中处理Java stdout和stderr

时间:2010-04-27 03:57:36

标签: java perl

我正在尝试从Perl脚本运行Java程序。我想避免在Java中使用System.exit(1)和System.exit(-1)命令。然而,我从Java打印到STDOUT和STDERR。在我的Perl脚本中,我正在阅读Java的标准输出并逐行输出。如果我看到stderr,如何打印stderr并失败?这就是我到目前为止所做的:

my $java_command = ...;
open(DATA, ">$java_command"); 
while (<DATA>) {
    chomp($_);
    ....
    ....
}

2 个答案:

答案 0 :(得分:1)

此处已讨论过:How can I capture STDERR from an external command?

所以你可以这样做:

open (DATA, "($java_command_with_args | sed 's/^/STDOUT:/') 2>&1 |");
while (<DATA>) {
    if (s/^STDOUT://)  {
        print "line from stdout: ", $_;
    } else {

        print "line from stderr: ", $_;
        die("Saw something on stderr");
    }
}

答案 1 :(得分:1)

查看FAQ How-can-I-capture-STDERR-from-an-external-command的perl文档。这将向您简要介绍有关捕获和丢弃STDOUT和STDERR的所有详细信息。