Я хочу запустить скрипт на python, выполнение которого в Laravel занимает около 3-5 минут.Во время его работы я хотел бы скопировать промежуточные сообщения для печати и отобразить их на своем шаблоне лезвия.
Мне удалось сделать это следующим образом
<div>
<h1>Application Status</h1>
{{ print_r(auth()->user()->liveExecuteCommand("cd ../../python-script && python3 -u main.py")) }}
</div>
Вот функция liveExecuteCommand, которую яполучил от другого ответа здесь
<code>public function liveExecuteCommand($cmd)
{
while (@ob_end_flush()); // end all output buffers if any
$proc = popen("$cmd 2>&1 ; echo Exit status : $?", 'r');
$live_output = "";
$complete_output = "";
echo '<code><pre>';
while (!feof($proc)) {
$live_output = fread($proc, 4096);
$complete_output = $complete_output . $live_output;
echo "$live_output";
@flush();
}
echo '
';pclose ($ прок);// получить статус выхода preg_match ('/ [0-9] + $ /', $ complete_output, $ match);// возвращаем состояние выхода и предполагаемый выходной массив возвращаемых данных ('exit_status' => intval ($ соответствует [0]), 'output' => str_replace ("Статус выхода:". $ соответствует [0], '', $ complete_output),);}
Моя проблема в том, что скрипт запускается до того, как отрисовываются HTML и CSS, и вместо обычной страницы я получаю довольно простую HTML-страницу.Как только скрипт завершится, остальная часть css загрузится, и страница выглядит хорошо.Но ожидание 3-5 минут работы страницы не выглядит хорошей идеей.
Я также пытался использовать Процесс Symfony , но я не смог заставить работать живое исполнениев питоне.Я даже попробовал флаг -u unbuffer, но он не работал.Он запускает весь скрипт, а затем загружает страницу
Есть ли лучший способ для этого?Мне кажется, что вызывать функции в блейде нехорошо.Я также попытался вызвать функцию в контроллере, но тогда мне пришлось бы ждать выполнения программы, чтобы передать вывод в представление.