带有node.js的Ruby子进程

我正在尝试将ruby实例作为我的节点程序的子进程启动。 事实上,一切都很好,但我无法与ruby的STDIN和STDOUT交互。 (当然ruby程序在我的终端上使用我的键盘输入)

所以这是一个我想要工作的简化代码……

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"); 

process.rb

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

它出什么问题了 ? 我已经设法让另一个进程工作……但是在这里,没有IO! 什么都没发生 !

编辑:我修改了ruby文件,以显示,对于node,该文件只用=== Hello! ===\n编写=== Hello! ===\n === Hello! ===\n里面。 所以我们可以说,ruby文件正确启动但是没有从节点接收任何东西(我试图在STDOUT.write之后STDOUT.write但是do语句永远不会执行。

STDOUT.write之后在ruby端尝试STDOUT.flush ,因为输出正在缓冲。