我正在尝试从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($_);
....
....
}
答案 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的所有详细信息。