Выполнить команду оболочки через PHP и получить вывод с информацией о том, из stdout и stderr - PullRequest
0 голосов
/ 24 июня 2019

Я хотел бы выполнить команду оболочки и получить вывод в массиве так, чтобы: (1) каждая строка вывода была элементом в массиве (2) строки «помечены» как из stdout илиstderr

Что-то вроде:

╔═════════╦══════════════════╗
║ Line No ║ Stdout or stderr ║
╠═════════╬══════════════════╣
║ Line1   ║ Stdout           ║
╠═════════╬══════════════════╣
║ Line2   ║ Stdout           ║
╠═════════╬══════════════════╣
║ Line3   ║ Stderr           ║
╠═════════╬══════════════════╣
║ Line4   ║ Stdout           ║
╚═════════╩══════════════════╝

Это таблица, но я действительно имел в виду многомерный массив, где $ thisarray [0], $ thisarray [1] - строки.Я предполагаю, что выполненная команда оболочки всегда будет генерировать новую строку, прежде чем она переключится либо на stderr, либо на stdout.

Таким образом, я смогу увидеть, какая строка принадлежит какому дескриптору файла, и иметь возможностьчтобы увидеть это в контексте.

Есть ли способ сделать это в PHP, с помощью команд оболочки exec или иным образом?

Если это невозможно с PHP, я не против других технологий.

1 Ответ

0 голосов
/ 24 июня 2019

Если вы возьмете строковый ввод с разрывами строк и пропустите через него:

$arr = explode(PHP_EOL, $output);

Тогда $ arr будет иметь ваш массив с одним элементом на строку вывода $.

...