2011-03-18 4 views
3

내 노드 프로그램의 서브 프로세스로 루비 인스턴스를 시작하려고합니다. 실제로 모든 것이 정상이지만 루비의 STDIN 및 STDOUT과 상호 작용할 수는 없습니다.ruby ​​subprocess with node.js

simpleproc.js

var util = require('util'), 
    spawn = require('child_process').spawn, 
    ruby = spawn('ruby', [__dirname + '/process.rb']); 

ruby.stdout.on('data', function (data) { 
    console.log('stdout: ' + data); 
}); 

ruby.stderr.on('data', function (data) { 
    console.log('stderr: ' + data); 
}); 

ruby.on('exit', function (code) { 
    console.log('child process exited with code ' + code); 
}); 

ruby.stdin.write("ping\n"); 

과정 ...

그래서 이것이 내가 일하고 싶어 단순화 된 코드입니다 (물론 루비 프로그램 내 키보드 입력 내 터미널에서 작동). rb

f = File.new("process.log", "w") 
f.write "=== Hello! ===\n" 
STDIN.each_line do |line| 
    STDOUT.write line 
    f.write line 
end 

무엇이 잘못 되었나요? 나는 이미 다른 프로세스가 작동하도록 만들었지 만, 여기에는 IO가 없습니다! 아무 반응이 없습니다 !

편집 : 루비 파일을 수정하여 노드에서 파일이 내부에만 === Hello! ===\n으로 쓰여 있음을 보여줍니다. 그래서 우리는 (나는 STDOUT.write하지만 DO 문이 실행되지 않습니다 후 세척하려고했습니다, 루비 파일이 제대로 시작 되나 노드로부터 아무것도받지 않습니다 말할 수 있습니다.

+0

나는 당신의 예제를 사용해 보았지만, 루비는 로그 파일을 생성하기도 전에 멈추는 것처럼 보인다. 어떤 아이디어? http://stackoverflow.com/questions/6902641/node-js- ruby-subprocess-hangs –

답변

3

STDOUT.write 후 루비 측에 STDOUT.flush 시도 , 출력 버퍼링되고있다.

+0

죄송합니다. 루비 STDIN이 아무 것도받지 못해서 작동하지 않았습니다. do 명령문에 파일을 쓰려고해도 어쨌든 아무 일도 일어나지 않습니다. 문제가 있습니다.하지만 아마도 내 노드의 버전 (ma Github repo에있는 ster 지점). –

+0

어쩌면 버전 일 수 있습니다. 노드 0.4.2와 루비 1.8.7 (Mac)을 사용하여 플러시 (silence without it)를 추가하면 코드가 작동합니다. 루비에서 파일이나 노드에 쓰는 것은 효과가 없습니다. – michaelku

+0

오, 이런! 실제로 나는이 JS 파일에서'ruby.stdin.write ("ping");을 작성했다. 어쨌든 고맙습니다. 평소의 지시 없이는 제대로 작동 할 방법이 없었기 때문에 답이 좋았습니다! 감사 ! –