2012-01-17 2 views
2

exec() 또는 shell_exec()을 사용하여 시스템 명령 (예 : ls -l /var/www/mysite)을 실행 한 다음 명령 결과를 출력 할 수 있습니다.PHP - exec/shell_exec 주기적 출력을 캡처하고 표시 하시겠습니까?

주기적으로 정보를 콘솔에 출력하는 명령의 결과를 어떻게 실행하고 표시합니까?

예 : 단순한 파이썬 스크립트가 있습니다. 콘솔에서 스크립트를 실행하면 스크립트를 강제 종료 할 때까지 콘솔에 어떤 유형의 정보를 영원히 10 초마다 인쇄합니다.

어떻게 PHP를 사용하여이 python 명령을 실행하고 어떻게 든 실시간으로 브라우저로 출력을 캡처하고 스트리밍 할 수 있습니까? 이게 가능한가? Ajax와 관련된 일종의 생각이 들었지만 잘 모르겠습니다.

나는이 같은 일을 시도 :

python myscript.py > output.txt 

을 그리고 어쩌면 주기적으로 tail 또는 cat 브라우저에서 output.txt 표시의 내용 Ajax를 사용하여 계획되었다. 그러나 output.txt은 스크립트가 강제 종료 된 후에야 콘텐츠가 추가 된 것으로 보입니다.

답변

2

버퍼링 중이기 때문에 output.txt에 대한 결과가 표시되지 않습니다. 파이썬에는 라인 버퍼로 만들 수있는 옵션이 있습니다. 맨 페이지에서 :

 -u  Force the binary I/O layers of stdin, stdout and stderr to be unbuffered. The text I/O layer will still be 
       line-buffered. 

그래서 당신의 명령은 다음이 될 것입니다 :

python -u myscript.py > output.txt 

PHP의 경우 flush 기능을 사용하면 도움이됩니다.

+0

그것은 올바른 접근 방법이지만 PHP는 여전히 내가 생각하는 것들을 버퍼링하는 것 같습니다 ... 응답을 주셔서 감사합니다. –

+0

@Jakobud, PHP 스크립트에서'flush'를 수동으로 호출 해 보셨습니까? –

+0

아 나는 그것을 시도하지 않았다. 나는 그 방향으로 가고 그것이 효과가 있는지 보았다. 감사. –

관련 문제