2011-12-15 2 views
4

하이에서 전체 응답을받지 -내가는 popen과 프로세스를 실행하는거야는 popen

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

그리고 5 개 라인을 반환하는 과정에서 3 선을 얻고있다. CLi에서이 정확한 명령을 실행하면 더 많은 응답을 받게됩니다. 그것은 마치 일찍 독서를 멈추는 것과 같습니다 (작업하는 동안 다음 2 줄을 완료하고 업데이트하는 데 시간이 걸릴 수 있습니다, 진행률 표시기입니다).

뭐가 잘못 되었나요? proc_open이 더 적합합니까 (시도해 볼 수 있는지 알아보기 시작했습니다).

답변

8

누락 된 두 줄은 STDERR에 기록되고 popen()은 STDOUT에 대한 포인터 만 반환합니다.

당신은 proc_open()를 사용하여 STDERR에 대한 포인터를 얻을, 또는 STDOUT에 STDERR을 리디렉션

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

popen() 줄을 변경, 그래서 그들은 당신의 출력에 포함 할 수 있습니다.

+0

+1, 나도 똑같다고 생각합니다. 모든 것을 읽을 때까지 EOF를 얻지 못할 것입니다. – codaddict

+0

Php ... 무엇? □ ('Д') ノ (┻ ┻ – ThorSummoner