Потоковый стандартный вывод из подпроцесса qx - PullRequest
3 голосов
/ 26 августа 2011

У меня есть большое количество скриптов, которые нужно выполнить.Мне нравится наблюдать за выходом указанных сценариев по мере их отладки в целях отладки.

Обычно print qx/foo/ собирает вывод stdout foo до тех пор, пока foo не будет выполнен, а затем печатает его.

Я быхотел бы транслировать его, чтобы я мог наблюдать, как вывод foo проходит, и фиксируют вывод foo в некотором скаляре.

В идеале:

$cmd = "foo";
$result = stream_and_store($cmd);

IЯ вполне уверен, что есть некоторые сложные методы, в том числе некоторые изящные модули CPAN.

Я хотел бы иметь возможность сделать это в базовом Perl 5.8.8 (да, античный, но это среда)без добавления других зависимостей.

Ответы [ 2 ]

3 голосов
/ 26 августа 2011
my $result = '';
open my $proc, '-|', "foo";
while (<$proc>) {
    print $_;
    $result .= $_;
}

Эта форма команды open запускает процесс в фоновом режиме и делает его вывод доступным в дескрипторе файла $proc.

3 голосов
/ 26 августа 2011

Будьте осторожны, что вы хотите:

$output = `somecmd | tee /dev/tty`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...