У меня есть программа, которая читает выходные данные из внешнего приложения. Внешнее приложение дает набор выходных данных.Моя программа читает выходные данные из этого внешнего приложения 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 при возникновении ошибки)
Но мне не удалось, я не знаю, что здесь не так.Пожалуйста, помогите мне.