Печать вывода Python с помощью кода PHP

У меня есть скребок, который царапает один сайт (написанный на питоне). При очистке сайта, которые печатают строки, которые собираются писать в CSV. Скребок написан на Python, и теперь я хочу выполнить его с помощью PHP-кода. Мой вопрос:

как я могу напечатать каждую строку, которая печатается кодом python.

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

Можно ли выводить вывод python во время его выполнения через PHP.

Ответ 1

Если я это хорошо понимаю, ваш python scrapper выводит в файл, и вы хотите "жить" отображать вывод через php. Как насчет выполнения и петли в php, в которой вы используете filemtime, чтобы узнать, обновлен ли файл? Вы можете добавить немного sleep, чтобы не перегружать сервер.

Если вы используете веб-страницу, вы можете использовать AJAX для перезагрузки только соответствующей части страницы с регулярным интервалом.

Надеюсь, это поможет вам.

Ответ 2

Простой случай

Предполагая, что выполнение скребка ограничено исполняемой программой php, запустите ее через popen: http://php.net/manual/en/function.popen.php

Более привлекательный случай

Если вы хотите, чтобы скребок работал на фоновом режиме и время от времени подключался к нему в php, вы можете использовать какой-либо паб/вспомогательный инструментарий или реализовать небольшой веб-сервер в скребке, который вы можете получить с помощью результатов обновления fopen ( "https://localhost: port/..." ) или завиток. Возможны многие другие механизмы rpc, сокеты домена, просмотр файла, sysv rpc...

Ответ 3

Я свяжусь с использованием stdout вместо файла. Значение python script записывается в stdout, а PHP скрипт читает это.

Используя proc_open, вы можете управлять процессом python с php, а также читать его вывод.

Ответ 4

Вместо использования exec вы можете использовать passthru, который будет выводить данные непосредственно в браузер. http://php.net/manual/en/function.passthru.php

Этого должно быть достаточно, чтобы получить println из вашего script.

Ответ 5

Я думаю, что у меня есть справедливое представление о том, что вы говорите, я не уверен, что вы имеете в виду.

Если вы хотите сказать, что каждый раз, когда python script выполняет печать, вы хотите, чтобы php-код выводил то, что было напечатано?

Если это так, вы можете передать его как POST DATA через HTTP. Это вместо того, чтобы печатать на Python, вы можете отправить его на PHP Script, который при получении данных распечатает его.

Я не уверен, что это то, чего вы хотите.

Ответ 7

Просто используйте system() вместо exec(). exec() сохраняет все строки вывода stdout внешней программы в массив, но system() выводит вывод stdout "как это бывает".