2014-06-11 3 views
3

Node.js가 시작한 Python 스크립트의 출력을 읽으려고합니다. 그러나 일단 프로세스가 완료되면 데이터에 액세스 만합니다.하위 프로세스의 버퍼링되지 않은 표준 출력 읽기

var proc, args; 

args = [ 
    './bin/build_map.py', 
    '--min_lon', 
    opts.sw.lng, 
    '--max_lon', 
    opts.ne.lng, 
    '--min_lat', 
    opts.sw.lat, 
    '--max_lat', 
    opts.ne.lat, 
    '--city', 
    opts.city 
]; 

proc = spawn('python', args); 

proc.stdout.on('data', function (buf) { 
    console.log(buf.toString()); 
    socket.emit('map-creation-response', buf.toString()); 
}); 

{stdio : 'inherit'}으로 프로세스를 시작하면 콘솔에서 직접 결과를 볼 수 있습니다. 하지만 process.stdout.on ('data', ...)과 같은 일은 작동하지 않습니다.

도착했을 때 하위 프로세스의 출력을 읽고 다른 곳으로 보낼 수 있도록하려면 어떻게해야합니까?

답변

-1

노드의 spawn 메소드에 다음 동작이 나타났습니다.

require('child_process').spawn('./echo.sh').stdout.on('data', function(data) { 
    console.log(data.toString()); 
    console.log('---------------'); 
}); 

은 이제 test.js를 실행 할 수 없습니다 : 흥미로운

$ node test.js 
1 
2 

--------------- 

아무것도

#!/bin/bash 

echo 1 
echo 2 

exit 0 

test.js라는 이름의 노드 스크립트

은의 우리가 echo.sh라는 bash는 스크립트가 있다고 가정하자.

그러나, 우리는 echo.sh을 수정하고 echo 1echo 2 사이에 약간의 지연 (0.1 초)을 추가하는 경우 :

#!/bin/bash 

echo 1 
sleep 0.1 
echo 2 

exit 0 

결과는 다릅니다

$ node test.js 
1 

--------------- 
2 

--------------- 

당신이 spawn 콜백가 호출 볼 수 있듯이 두 번 정확히 당신이 필요로하는 것입니다. 나는 이것이 파이썬과 함께 작동하는지 모르겠다. 그러나 나의 제안은 당신이 브로드 캐스트하기를 원하는 각 작업 후에 당신의 build_map.py에 지연을 추가하는 것이다. 어쩌면 당신이 원하는 것을 얻을 수있는 이런 식으로.

행운을 빈다.

+0

지연 추가는 결코 좋은 해결책이 아닙니다. 문제의 진정한 원인을 찾아야합니다. 이 비슷한 질문을 확인하십시오. http://stackoverflow.com/questions/18849112/stream-child-process-output-in-flowing-mode –

관련 문제