Обработка Java stdout и stderr в Perl - PullRequest
0 голосов
/ 27 апреля 2010

Я пытаюсь запустить программу Java из моего скрипта Perl. Я хотел бы избежать использования команд System.exit (1) и System.exit (-1) в Java. Однако я печатаю в STDOUT и STDERR из Java. В моем Perl-скрипте я читаю из стандартного вывода Java и использую этот построчный вывод. Как распечатать stderr и потерпеть неудачу, если я когда-либо увижу stderr? Это то, что я до сих пор:

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

Ответы [ 2 ]

1 голос
/ 27 апреля 2010

Посмотрите документацию по perl для FAQ How-can-I-capture-STDERR-from-an-external-command . Это проинформирует вас обо всех подробностях захвата и удаления STDOUT и STDERR.

1 голос
/ 27 апреля 2010

Это обсуждалось здесь: Как я могу захватить STDERR из внешней команды?

Так что вы можете сделать что-то вроде:

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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...