在Perl中处理Java标准输出和标准错误
问题描述:
我想从我的Perl脚本运行Java程序。我想避免在Java中使用System.exit(1)和System.exit(-1)命令。然而,我从Java打印到STDOUT和STDERR。在我的Perl脚本中,我正在阅读Java的stdout并逐行输出。如果我看到stderr,如何打印stderr并失败?这是我到目前为止有:在Perl中处理Java标准输出和标准错误
my $java_command = ...;
open(DATA, ">$java_command");
while (<DATA>) {
chomp($_);
....
....
}
答
这已经在这里讨论: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");
}
}