#php
#php
Вопрос:
Я борюсь с этим уже целый день… У меня есть команда ОС, которая возвращает несколько строк вывода:
root@downloader:/var/www/html# /usr/local/bin/sdm120c -a 1 -P N -S 2 -j 20 /dev/ttyUSB0
Voltage: 248.00 V
Current: 16.29 A
Power: 4000.40 W
Active Apparent Power: 4014.28 VA
Reactive Apparent Power: -339.60 VAR
Power Factor: 1.00
Phase Angle: 0.00 Degree
Frequency: 50.00 Hz
Import Active Energy: 22726178 Wh
Export Active Energy: 252806 Wh
Total Active Energy: 22978984 Wh
Import Reactive Energy: 1136648 VARh
Export Reactive Energy: 2343577 VARh
Total Reactive Energy: 3480225 VARh
OK
Сейчас я пытаюсь получить этот вывод через Интернет с помощью простого PHP-скрипта, поэтому я делаю:
<?php
echo (exec('/usr/local/bin/sdm120c -a 1 -P N -S 2 -j 20 /dev/ttyUSB0'));
?>
Однако результат всегда «OK», который является последней строкой вывода.
Моей первой идеей было «grep» необходимую информацию в команде ОС и запускать ее несколько раз по мере необходимости, например:
echo (exec('/usr/local/bin/sdm120c -a 1 -P N -S 2 -j 20 /dev/ttyUSB0 | grep -i Power:'));
и было бы достаточно, если бы мне нужна была только одна строка вывода. Проблема в том, что я не могу запускать команду ОС чаще, чем раз в 3 или 4 секунды, поэтому, поскольку мне нужно несколько строк, я не могу использовать эту альтернативу…
Есть идеи, как заставить вывод всех команд ОС отображаться в запросе PHP?
Комментарии:
1. Как описано в документации , добавьте переменную к
exec
вызову, чтобы результаты возвращались в виде массива.2. В качестве альтернативы вы можете захотеть взглянуть на оболочку вокруг основных функций, которые немного упрощают обработку команды / вывода. Например, Symfony предоставляет компонент процесса , который вы могли бы использовать
Ответ №1:
Согласно комментариям от @RiggsFolly и @Dave, работает следующее:
<?php
exec('/usr/local/bin/sdm120c -a 1 -P N -S 2 -j 20 /dev/ttyUSB0', $output);
print_r($output[2]);
print_r($output[4]);
?>