Как я могу прочитать вывод из внешних команд в режиме реального времени в Perl?
У меня есть несколько скриптов bash, которые я запускаю, но они могут занять несколько часов, в течение которых они извергают скорость загрузки, ETA и подобную информацию. Мне нужно захватить эту информацию в perl, но я столкнулся с проблемой, я не могу прочитать вывод построчно (если я что-то упустил).
Любая помощь, решающая это?
РЕДАКТИРОВАТЬ: чтобы объяснить это немного лучше, я запускаю несколько сценариев bash рядом друг с другом, я хочу использовать gtk с perl для создания удобных индикаторов выполнения. В настоящее время я запускаю 2 потока для каждого сценария bash, который я хочу запустить, один основной поток для обновления графической информации. Это выглядит примерно так (сократить столько, сколько я могу):
my $command1 = threads->create(\&runCmd, './bash1', \@out1);
my $controll1 = threads->create(\&monitor, $command1, \@out1);
my $command1 = threads->create(\&runCmd, 'bash2', \@out2);
my $controll2 = threads->create(\&monitor, $command2, \@out2);
sub runCmd{
my $cmd = shift;
my @bso = shift;
@bso = `$cmd`
}
sub monitor{
my $thrd = shift;
my @bso = shift;
my $line;
while($thrd->is_running()){
while($line = shift(@bso)){
## I check the line and do things with it here
}
## update anything the script doesn't tell me here.
sleep 1;# don't cripple the system polling data.
}
## thread quit, so we remove the status bar and check if another script is in the queue, I'm omitting this here.
}