захватить вывод команды imagemagick в php

Я запускаю следующую команду imagemgaick, которая выводит на стандартный вывод:

compare <img1> <img2> -metric MAE null:

Я пытаюсь захватить вывод этой команды из PHP. Обычно я использую команды exec($cmd,$output), которые останавливают вывод cmd на стандартный вывод и помещают его в массив $output. Однако по какой-то причине этого не происходит, вывод по-прежнему идет на стандартный вывод, а выходной массив пуст.

Любая идея, как обойти эту проблему?

Спасибо.


person Max    schedule 09.08.2010    source источник


Ответы (2)


exec() только помещает вывод в STDOUT в выходной массив, однако различные инструменты imagemagick также выводят сообщения в STDERR. Вы можете перенаправить сообщения из STDERR в STDOUT (и, следовательно, также получить их в массиве $output), добавив это в конец вашей команды: 2>&1

В качестве альтернативы, если вы хотите иметь возможность различать, где сообщения были первоначально выведены, вы можете использовать proc_open, который позволяет вам указать отдельные каналы для STDOUT и STDERR и получать выходные данные из них отдельно.

person reko_t    schedule 09.08.2010

Сравните отпечатки со STDERR.

Использовать:

exec("compare <img1> <img2> -metric MAE null: 2>&1", $output);
person jmz    schedule 09.08.2010