Вызов команды из Perl, нужно увидеть вывод - PullRequest
6 голосов
/ 14 декабря 2010

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

Функция system не выдает никаких выходных данных, пока она не будет завершена.

Функция exec выдает результат; однако с этого момента он завершает работу сценария Perl, а это не то, что я хотел.

Я в Windows. Есть ли способ сделать это?

1 Ответ

15 голосов
/ 14 декабря 2010

Backticks или команда qx, запустите команду в отдельном процессе и вернете вывод:

print `$command`;
print qx($command);

Если вы хотите увидеть промежуточный вывод, используйте open, чтобы создать дескриптор потока вывода команды и прочитать из него.

open my $cmd_fh, "$command |";   # <---  | at end means to make command 
                                 #         output available to the handle
while (<$cmd_fh>) {
    print "A line of output from the command is: $_";
}
close $cmd_fh;
...