2014-01-22 8 views
2

Я использую команду exec() в PHP для запуска скрипта python, который будет выдавать некоторый вывод. Этот скрипт python запрашивает довольно большую базу данных PostgreSQL, поэтому требуется выполнить второй или две. Вот мой код:Сделать PHP ждать завершения скрипта python

test.php

<?php 
$output = exec('/usr/local/bin/python2.7 test.py', $output); 
var_dump($output); 
?> 

test.py

import nfldb 


db = nfldb.connect() 
q = nfldb.Query(db) 

q.game(season_year=2012, season_type='Regular') 
for pp in q.sort('passing_yds').limit(10).as_aggregate(): 
    print pp.player, pp.passing_yds 

Весь код работает правильно, как проверить, запустив сценарий питона из командной строки и сдачи теста «print 10» в скрипте python, чтобы убедиться, что скрипт php работает.

Я уверен, потому что для выполнения скрипта требуется несколько секунд, чтобы PHP не ожидал вывода правильно. Я попробовал функцию set_time_limit(), но на самом деле не рассчитывает время от exec().

Любые предложения?

+0

проверено $ output = passthru ('/ usr/local/bin/python2.7 test.py'); ? – hanshenrik

+0

Да, passthru тоже не работает. – dmarzio

+0

lemme guess, вы проверяете скрипт python с пользователем X, а PHP запускает скрипт python с пользователем Y (может быть, пользовательский www-data?) .. лучше всего предположить, что скрипт python имеет проблему (доступ?), Работающую под PHP user .. idk, хотя это просто догадка – hanshenrik

ответ

0

Использование popen с r режимом .:

<?php 
    $handle = popen('/usr/local/bin/python2.7 test.py', 'r'); 
    $output = fread($handle, 1024); 
    var_dump($output); 
    pclose($handle); 
?> 
+0

Это тоже не работает. Скрипт php выводится почти мгновенно, поэтому я знаю, что он не полностью выполняет этот скрипт. – dmarzio

+0

@ user1874544, Что произойдет, если вы укажете абсолютный путь 'test.py'? – falsetru

+0

Это не проблема, потому что я знаю, что скрипт уже работает. Я поставил «print 10» в скрипте python, и PHP-скрипт сделал вывод 10, поэтому я знаю, что это не разрешение или проблема с расположением файлов. – dmarzio

0

вы присваиваете возвращаемое значение exec() до $ вывода, который переписывает фактический выход с числовым значением возврата программы. Не делай этого.

Смежные вопросы