2011-08-01 66 views
-1

基於示例here,我試圖從產卵Node.js的(v0.4.8)紅寶石過程(v1.8.7)。一個進程和一個空的日誌文件被創建,但沒有任何反應,直到我殺了它。如果我忽略STDIN.each_line位,代碼運行良好。Node.js的紅寶石子掛

我起了疑心標準輸入沒有完成這樣的紅寶石還在等待輸入。也許ruby.stdin.write("ping\n");不會做我認爲應該做的事情?

+0

有你在自身運行Ruby代碼?你看到相同的行爲,還是按預期運行? – Pat

+0

@pat如果我運行命令行Ruby代碼,輸入一些隨機文本,然後按回車,它呼應的文字,並創建在同一目錄下的日誌文件。 –

+0

更正:它確實會創建一個空白的進程日誌文件,而不是我所期望的。我會更新我的問題。我還發現,如果我忽略STDIN.each_line部分,ruby文件可以正常工作。 –

回答

1

這裏是我有一個似乎做你想要什麼:

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

function trim(str) { 
    return str.replace(/^\s+|\s+$/, ''); 
} 

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

ruby.stdout.on('end', function(data) { 
    ruby.stdout.flush(); 
}); 

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

ruby.on('exit', function(code, signal) { 
    if(code != null) console.log('exit: ' + code); 
    else if(signal != null) console.log('killed: ' + signal); 
}); 

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