Я использовал PHP для успешного вызова скрипта python и получил результат. Но я должен дождаться окончания сценария без вывода. Он выглядит недружелюбно с моим клиентом.
Как я могу вернуть результаты скрипта на веб-сайт PHP в режиме реального времени?
Например, для кода ниже я хочу, чтобы веб-сайт PHP показывал выходное сообщение в реальном времени, а не показывал их вместе в конце. Как я могу изменить свой код? Спасибо .
Код PHP:
<?php $k = $_REQUEST['k']; if (!empty($k)) { $k = trim($k); $a = array(); exec('python ./some.py '.$k, $a); echo $a[0]; } ?>
Код Python:
#!/usr/bin/env python #-*- coding:utf-8 -*- import sys def do_some(a): print 'test1' time.sleep(30) print 'test2' if __name__ == '__main__': print 'Now the python scritp running' time.sleep(20) a = sys.argv[1] if a: print 'Now print something' T = do_some(a)
По спецификации, exec
останавливает вызывающую программу до конца вызываемого абонента. После этого вы возвращаете результат в переменной.
Если вы хотите отправить данные, как только они будут созданы, вы должны использовать popen
. Он откроет новый процесс, но не заблокирует вызывающего абонента. Таким образом, вы можете выполнять другие задачи, такие как цикл, чтобы читать вывод подпроцесса по очереди, чтобы отправить его вашему клиенту. Что-то вроде этого:
$handle = popen("python ./some.py ", 'r'); while(!feof($handle)) { $buffer = fgets($handle); echo "$buffer<br/>\n"; ob_flush(); } pclose($handle)