Как сбросить вывод в backticks In Perl? - PullRequest
7 голосов
/ 17 апреля 2009

Если у меня есть это приложение на Perl:

print `someshellscript.sh`;

, который печатает кучу материала и занимает много времени, как я могу напечатать этот вывод в середине выполнения сценария оболочки?

Похоже, что Perl напечатает результат someshellscript.sh только после его завершения, есть ли способ сделать вывод сброшенным в середине выполнения?

Ответы [ 2 ]

16 голосов
/ 17 апреля 2009

Что вы, вероятно, хотите сделать, это что-то вроде этого:

open(F, "someshellscript.sh|");
while (<F>) {
    print;
}
close(F);

Это запускает someshellscript.sh и открывает канал, который читает его вывод. Цикл while читает каждую строку вывода, сгенерированную сценарием, и печатает ее. Для получения дополнительной информации см. Страницу документации open .

3 голосов
/ 17 апреля 2009

Проблема в том, что экранирование с помощью обратных кавычек сохраняет ваш скрипт в строке, которую вы затем распечатываете. По этой причине не было бы возможности «промыть» печатью.

Использование команды system () должно выводить вывод непрерывно, но вы не сможете захватить вывод:

system "someshellscript.sh";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...