Как рассчитать переменную внутри простой программы, которая будет использоваться внутри perl-скрипта? - PullRequest
3 голосов
/ 26 октября 2019

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

$psnr_command_line = '';
$psnr_command_line = "/snr file1 file2 width height"

После того, как я создал командную строку, я просто вызываю систему в perl:

$psnr_Y = system ($psnr_command_line);

В этом случае система возвращает 0, если команда успешно выполнена. Но мне нужно, чтобы что-то еще было сохранено в $ psnr_Y. Конечно, мне нужно фактическое значение psnr, которое было вычислено внутри программы.

Итак, до сих пор у меня есть следующее. Внутри простой программы snr я печатаю результат вычислений (в данном случае psnr), поэтому в командной строке после запуска сценария perl я получаю примерно следующее: P = 65535.000000 MSE = 304531.729854 PSNR = 41.493141dB

Iбродил, если как-то я могу получить значение PSNR в $ psnr_Y значение в Perl? Может быть, как-нибудь перенаправить печать в переменную perl, а потом просто разобрать эту строку, чтобы получить PSNR?

Есть идеи? Любые другие подходы приветствуются.

Спасибо.

1 Ответ

3 голосов
/ 26 октября 2019

Я думаю, что вы ищете оператор обратных тегов:

$psnr_Y = `$psnr_command_line`;

В отличие от функции system(), которая возвращает системный код завершения команды, оператор обратных тегов возвращает выходные данные программы (т.е. что он отправил STDOUT).

После выполнения команды вы можете проанализировать результат с помощью регулярного выражения, например:

my ($val) = ($psnr_Y =~ m/PSNR=(\S+)/);

Ссылка: perlop - операторы, подобные кавычкам :

STRING Строка, которая (возможно) интерполируется и затем выполняется как системная команда с /bin/sh или ее эквивалентом. Подстановочные знаки, трубы и перенаправления будут выполнены. Возвращается собранный стандартный вывод команды ;стандартная ошибка не изменяется.

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