2011-12-15 2 views
4

Привет Я бегу процесс с POPEN; -не получает весь ответ от POPEN

$handle = popen('python scriptos.py', "r"); 
while (!feof($handle)) { 
    $data = fgets($handle); 
    echo "> ".$data; 
} 

И я получаю только 3 строки из процесса, который возвращает 5 строк. Я запустил эту точную команду в CLi, и я получу больше ответа. Это похоже на то, что он перестает читать на ранней стадии (может потребоваться время для завершения и обновления следующих 2 строк во время работы, это индикатор прогресса).

Я делаю что-то неправильно? Является ли proc_open более подходящим (я начал видеть, могу ли я попробовать это).

ответ

8

Две отсутствующие линии, вероятно, записываются в STDERR, а popen() возвращает указатель на STDOUT.

Вы можете получить указатель на STDERR, используя proc_open() или изменить popen() строку

$handle = popen('python scriptos.py 2>&1', "r"); 

перенаправить STDERR на STDOUT, так что они включены в ваш вывод.

+0

+1, я тоже подозреваю то же самое, вы не получите EOF, пока не прочтете все. – codaddict

+0

Php ... ЧТО?ヽ ('Д') ノ (┻━┻ – ThorSummoner