Как показать прямой вывод скрипта Python в Laravel Blade - PullRequest
0 голосов
/ 24 декабря 2018

Я хочу запустить скрипт на 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, но он не работал.Он запускает весь скрипт, а затем загружает страницу

Есть ли лучший способ для этого?Мне кажется, что вызывать функции в блейде нехорошо.Я также попытался вызвать функцию в контроллере, но тогда мне пришлось бы ждать выполнения программы, чтобы передать вывод в представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...