Как получить вывод команды сразу? - PullRequest
2 голосов
/ 31 июля 2010

Я использую синтаксис обратных тиков perl для запуска некоторых команд. Я хотел бы, чтобы вывод команды был записан в файл, а также распечатан на стандартный вывод. Я могу выполнить первое, добавив > в конце строки, помеченной в обратном тиканье, но я не знаю, как сделать вывод выводимым сразу после его создания. Если я сделаю что-то вроде

print `command`; 

вывод печатается только после завершения command.

Спасибо, Dave

1 Ответ

8 голосов
/ 31 июля 2010

Вы не можете сделать это с обратными галочками, поскольку они возвращаются в программу Perl только после завершения выполнения.

Итак,

print  `command1; command2; command3`;

будет ждать, пока команда3 не завершит вывод чего-либо.

Вы должны использовать трубу вместо бэкстиков, чтобы иметь возможность немедленно получить вывод:

open (my $cmds, "-|", "command1; command2; command3");
while (<$cmds>) {
        print;
}
close $cmds;

После того, как вы это сделали, вы должны увидеть, хотите ли вы буферизовать или нет(в зависимости от того, насколько немедленным вы хотите, чтобы вывод был): Страдает от буферизации?

Чтобы напечатать и сохранить вывод, вы можете открыть () файл для записи вывода в:

open (my $cmds, "-|", "command1; command2; command3");
open (my $outfile, ">", "file.txt");
while (<$cmds>) {
        print;
        print $outfile $_;
}
close $cmds;
close $outfile;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...