Perl - подавить вывод консоли? - PullRequest
3 голосов
/ 17 ноября 2011

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

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

Я хочу что-то вроде этого:

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

Есть ли способ сделать это?

Ответы [ 2 ]

7 голосов
/ 17 ноября 2011

См. IO::CaptureOutput

 use IO::CaptureOutput qw(capture qxx qxy);

 # STDOUT and STDERR separately
 capture { noisy_sub(@args) } \$stdout, \$stderr;
2 голосов
/ 17 ноября 2011

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

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

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

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