简体   繁体   English

在Perl中处理Java stdout和stderr

[英]Handling Java stdout and stderr in Perl

I am trying to run a Java program from my Perl script. 我正在尝试从我的Perl脚本运行Java程序。 I would like to avoid using System.exit(1) and System.exit(-1) commands in Java. 我想避免在Java中使用System.exit(1)和System.exit(-1)命令。 I am however printing to STDOUT and STDERR from Java. 但是我正在从Java打印到STDOUT和STDERR。 In my Perl script, I am reading from Java's stdout and using that line by line output. 在我的Perl脚本中,我正在从Java的stdout中读取并逐行使用该输出。 How do I print stderr and fail if I ever see stderr? 如果看到stderr,如何打印stderr并失败? This is what I have so far: 这是我到目前为止的内容:

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

This has been discussed here: How can I capture STDERR from an external command? 这里已经讨论了这一点: 如何从外部命令捕获STDERR?

So you can do something like: 所以你可以这样做:

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");
    }
}

Look at the perl documentation for FAQ How-can-I-capture-STDERR-from-an-external-command . 查看perl文档中的FAQ How-can-I-capture-STDERR-from-external-command This will brief you all the details about capturing and discarding STDOUT and STDERR. 这将向您简要介绍有关捕获和丢弃STDOUT和STDERR的所有详细信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM