Как очистить вывод в обратных кавычках в Perl?
Вопрос
Если у меня есть это приложение Perl:
print `someshellscript.sh`;
который печатает кучу всего и занимает много времени, как я могу распечатать этот вывод в середине выполнения сценария оболочки?
Похоже, Perl будет печатать результат someshellscript.sh только после завершения. Есть ли способ сбросить вывод в середине выполнения?
Решение
Вероятно, вы хотите сделать что-то вроде этого:
open(F, "someshellscript.sh|");
while (<F>) {
print;
}
close(F);
Это работает someshellscript.sh
и открывает канал, который считывает его выходные данные.А while
Цикл считывает каждую строку вывода, сгенерированную сценарием, и печатает ее.См. открыть страницу документации для получения дополнительной информации.
Другие советы
Проблема здесь в том, что экранирование с помощью обратных кавычек сохраняет ваш скрипт в строку, которую вы затем печатаете.По этой причине не было бы возможности «прошить» печатью.
Использование команды system() должно печатать выходные данные непрерывно, но вы не сможете захватить выходные данные:
system "someshellscript.sh";