2015-12-27 2 views
1

У меня есть скрипт PHP, который вызывает скрипт Python, который перебирает текстовый файл, выводящий определенные строки на веб-страницу. PHP скрипт вызывает сценарий Python и повторяет свой вывод, как это ...Как заставить PHP останавливать автоматически усекающий вывод

$output = shell_exec($command); 
echo ($output); 

Соответствующий код Python это ...

for myStr in myList: 
    myObj=re.match(r'(\s|\S)+\[(?P<specificVal>\d+)(\s|\S)+',myStr) 
    specificVal = int(myObj.group('specificVal')) 
    if specificVal in range(min,max): 
     print ('<p>%s</p>' % (myStr)) 

Это работает около ста линий, то он прекращает вывод , когда может быть целых несколько тысяч. Есть ли лучший способ сделать это, или мне просто нужно отредактировать некоторые параметры php.ini? Спасибо!

+4

Зачем смешивать 2, почему бы просто не написать все это ни на питоне, ни на php? –

+0

Как вы создаете 'myList' в Python? Это почти наверняка больше похоже на ошибку python, чем на php. – developerjack

+1

Я предполагаю, что скрипт Python работает правильно, когда вы запускаете его без PHP? – Will

ответ

1

Это может иметь отношение к shell_exec(), не возвращая все выходные данные по какой-либо причине. Вы можете попробовать использовать более надежные-proc_open():

<?php 

$fileDescriptors = array(
    0 => array("pipe", "r"), // STDIN 
    1 => array("pipe", "w"), // STDOUT 
    2 => array("pipe", "w") // STDERR 
); 
$pipes = array(); 
flush(); 

$process = proc_open($command, $fileDescriptors, $pipes, realpath('.'), array()); 
if (!is_resource($process)) 
{ 
    error_log("Failed to execute '$command'"); 
    return; 
} 

while ($data = fgets($pipes[1])) 
{ 
    print $data; 
    flush(); 
} 

Вы можете получить некоторые преимущества в производительности от не вызывая flush(); на каждой итерации цикла, а также.

Если это все еще не дает вам весь вывод, я бы с подозрением относился к проблеме в скрипте Python, и вам следует опубликовать его больше, чтобы облегчить его отладку.

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