2009-02-07 2 views
1

목표 : 사용자가 서버에서 얼마나 많은 파일을 다운로드했는지 확인할 수있는 진행률 표시 줄을 만듭니다.AJAX 진행 : 셸에서 출력 읽기

시나리오 : popen을 통해 python 스크립트를 실행하는 PHP 스크립트가 있습니다. 그래서 같이 이런 짓을했는지 :

$handle = popen('python last', 'r'); 

$read = fread($handle, 4096); 

pclose($handle); 

이 파이썬 스크립트 출력을 같은 쉘 뭔가 :

[last] ZVZX-W3vo9I: Downloading video webpage 
[last] ZVZX-W3vo9I: Extracting video information 
[download] Destination: myvideo.flv 
[download] 9.9% of 10.09M at 3.30M/s ETA 00:02 

문제 : 내가 모든 얻을 쉘 출력에 의해 생성 된 파일을 읽을 때 쉘 출력은 마지막 행을 제외하고!? 왜?

셸을 통해 명령을 실행할 때 셸 커서가 해당 줄의 끝에 나타나고 스크립트가 완료 될 때까지 기다립니다.

덕분에 모든

+0

, 나는 도움이되지 수 있지만 * 문제 * 당신이 가지고있는 것을 알 수 (입력에서 행이 누락 됨)은 질문 제목과는 아무런 관련이 없습니다. 제목을 변경하여 문제를 해결할 수 있습니다. 어쩌면 "PHP : AJAX와 관련이 없기 때문에 셸에서 결과를 읽는 것"이 ​​더 좋습니다. – Tomalak

답변

3
내 마음에 와서

우선 : 그 라인에 보이기 때문에 아마도 추악한 제어 문자를 포함 마지막 행을 표시하지 않습니다 때문에 아마 프로그램이이 TTY에서 실행되지 않는다는 것을 감지하고 자체 업데이트?

출력을 셸의 파일로 리디렉션하거나 less를 통해 파이프하면 어떻게됩니까? 마지막 줄이 보이지 않으면이 경우가 될 수 있습니다. 나는 소스를 고치는 것보다 다른 해결책을 모른다.

+0

예 마지막 줄이 자동으로 업데이트됩니다. 무엇이 업데이트되고 있는지 어떻게 알 수 있습니까? – Abs

+0

글쎄, 내가 말했듯이, 프로그램이 tty에서 돌아 가지 않는다는 것을 감지했을 때 단순히 인쇄되지 않을 수도있다. 이 경우 프로그램을 수정하거나 커맨드 라인 옵션 (사용 가능한 경우)을 찾아 tty가 아닌 경우에도 정보를 인쇄해야합니다. – user52875

0

EOF까지 읽습니까?

$handle = popen('python last 2>&1', 'r'); 

추가 정보는 여기에서 찾을 수 있습니다 :

$handle = popen('python last', 'r'); 
$read = ""; 

while (!feof($handle)) { 
    $read .= fread($handle, 4096); 
} 

pclose($handle); 
0

이 당신의 친구가 될 것입니다 귀하의 질문을 통해 읽기 Wikipedia

관련 문제