PHP - захват и отображение периодического вывода exec / shell_exec? - PullRequest
2 голосов
/ 18 января 2012

Вы можете легко использовать exec() или shell_exec() для выполнения системной команды, например, ls -l /var/www/mysite, а затем вывести результат команды.

Как выполнить и отобразить результат команды, которая периодически выводит информацию на консоль?

Пример: У вас есть просто скрипт Python. Если вы запускаете скрипт из консоли, он просто выводит какую-то информацию на консоль каждые 10 секунд, пока вы не закроете скрипт принудительно.

Как можно использовать PHP для выполнения этой команды python, а также для захвата и потоковой передачи результатов в браузер в реальном времени? Возможно ли что-то подобное? Я думаю, что должен быть задействован какой-то Ajax, но я не уверен.

Я пытался сделать что-то вроде этого:

python myscript.py > output.txt

А затем я планировал, возможно, использовать Ajax для периодического tail или cat содержимого output.txt и отображения в браузере. Но output.txt, похоже, не добавляет к нему никакого контента, пока скрипт не будет принудительно завершен.

1 Ответ

2 голосов
/ 18 января 2012

Вы не видите вывод на output.txt, потому что он буферизируется.Для python есть возможность сделать его буферизованным.Из man-страницы:

       -u     Force  the  binary I/O layers of stdin, stdout and stderr to be unbuffered.  The text I/O layer will still be
              line-buffered.

Таким образом, ваша команда станет такой:

python -u myscript.py > output.txt

Для PHP функция flush должна помочь вам.

...