STDOUT перенаправлен извне, и на консоли не видно выходных данных - PullRequest
1 голос
/ 22 июня 2010

У меня есть программа, которая читает выходные данные из внешнего приложения. Внешнее приложение дает набор выходных данных.Моя программа читает выходные данные из этого внешнего приложения while($line=<handle to external app>) и печатает его в STDOUT. Но «print $line STDOUT» печатает только несколько строк, и когда ошибка произошла, печать в STDOUT не работает, но мой еще один оператор протоколирования »push @arr,$line "сохранил полный вывод из внешнего приложения. Из этого я узнал, что STDOUT не работает должным образом при возникновении ошибки.

Например: если вывод внешнего приложения имеет вид:


Starting command
First command executed successfully    
Error:123 :next command failed    
Program terminated

Здесь STDOUT печатает только:

Starting command
First command executed successfully

Но если я проверю массив, у него будет полный вывод, включая сведения об ошибках.Итак, я предположил, что STDOUT был перенаправлен или потерян.

Поэтому я попытался сохранить STDOUT в начале программы до $old_handle using open, а затем попытаться восстановить его перед оператором печати, используя select($old_handle) (думая, что что-то перенаправляет STDOUT при возникновении ошибки)

Но мне не удалось, я не знаю, что здесь не так.Пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Возможно, выход буферизуется.Попробуйте установить

$| = 1;

в начале вашей программы.Это приведет к тому, что вывод будет отображаться сразу, а не буферизироваться на потом.

0 голосов
/ 22 июня 2010

Просто угадайте, возможно, потому что вывод ошибок не идет в STDOUT. Использовать редирект

first_program |& perl_program

или

first_program 2>&1 | perl_program
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...