Perl - подавляет вывод консоли?

Мне нужен собственный способ решить эту проблему...

У меня есть команда perl, которая делает вызов, который иногда выводит текст непосредственно на консоль.

Мне нужно что-то вроде этого:

$text = get_output_from(MagicCommandICan'tChange());
if ($text neq "a specific value") {
 print $text;
}

Как это сделать?

2 ответа

См. IO::CaptureOutput

use IO::CaptureOutput qw(capture qxx qxy);
 # STDOUT and STDERR separately
 capture { noisy_sub(@args) } \$stdout, \$stderr;


Я предполагаю, что этот Perl script вызывает внешний исполняемый файл. Если вывод выводится на stdout, вы можете использовать операторы backtick или qx для запуска команды и записи вывода. В системе Unix вы можете использовать system() и перенаправить вывод на /dev/null с помощью оператора >. Вы также можете вызвать open с помощью команды:

Если имя файла начинается с '|', имя файла интерпретируется как    команда, для которой должен быть отправлен вывод, и если имя файла    заканчивается символом '|', имя файла интерпретируется как команда, которая    трубы для нас. См. "Использование open() для IPC" в perlipc для    больше примеров этого. (Вы не можете "открывать"    команда, которая работает как внутри, так и снаружи, но см. IPC:: Open2,    IPC:: Open3 и "Двунаправленная связь с другим    Процесс" в perlipc для альтернатив.)

Наконец, вы можете закрыть и снова открыть дескрипторы файла STDOUT и STDERR (изменить: IO::CaptureOutput было рекомендовано ниже). Это странно. Я бы не рекомендовал его в качестве лучшей альтернативы.

licensed under cc by-sa 3.0 with attribution.