2010-12-06 9 views
1

커맨드 라인에서 PHP가 실행 한 프로세스에서 실시간으로 출력을 표시하고 입력을 읽는 방법을 알아 내려고합니다. 많은 대안이있는 것 같습니다 : shell(), exec(), system(), popen(), proc_open()실시간으로 프로세스를 실행하십시오.

그리고 차이점은 무엇인지 완전히 명확하지 않습니다. 필요한 것은 프로세스를 실행하고, PHP 스크립트가 호출되는 터미널에 출력을 표시하고, 입력을 읽은 다음 프로세스가 종료 될 때 PHP 스크립트 흐름으로 돌아가는 것입니다. 내가 설명한 proc_open() 옵션 중 아마도이 작업을 수행 할 수 있지만 잔인한 것으로 보입니다. 원하는 작업은 외부 프로세스를 제어하고 완료 될 때까지 기다리는 것입니다.

관련이있는 몇 가지 질문이 있지만 실제로 볼 수있는 것은 실제로 백그라운드에서 프로세스를 보내거나 (브라우저가 아닌) 브라우저에서 결과를 표시하는 것입니다. 터미널에 있음).

+1

같은 pcntl_exec() 당신은 당신이 '실시간'가 무슨 뜻인지 알아 스펙 수 있습니까? 이것은 당신이 얻는 대답의 종류에 차이를 만들 것입니다. 예를 들어, 인간의 지각의 관점에서 '실시간'은 원자력 발전소의 제어 시스템 측면에서 '실시간'과 다르다. – rcravens

+0

사용자 인식의 의미에서 실시간을 의미합니다. 예를 들어, 쉘()은 프로세스가 완료되면 프로세스의 모든 출력을 함께 제공합니다. – Andrea

답변

2

사용 pcntl_fork()this

+0

이것이 내가 찾는 것 같습니다. 같은 방법으로 실행 파일 경로와 인수 대신 셸 명령을 입력 할 수 있습니까? 그것은 사물을 조금 단순화합니다. – Andrea

+0

환상적! 고마워요! – Andrea

+0

@Andrea : pcntl_exec()가 쉘 내장 명령과 함께 작동하는지 모르겠습니다. 하지만 예를 들면 'ls'는 PHP로 쉘 스크립트 (she-bang 라인과'ls')를 빠르게 생성하고, 디스크상의 파일에 작성하고, 파일을 실행 가능하게 만들고, 그 경로를 pcntl_exec에 전달합니다. – rik

0

아마도 Google 코드 검색의 this result이 도움이 될 수 있습니다. 지금까지 STDOUT의 출력을 잡아 내고 (잠재적으로) STDIN을 통해 입력을 제공하는 것을 포함하여 찾고있는 것과 매우 유사한 것을하고 있다고 말할 수 있습니다.

관련 문제