Javascript 带有node.js的Ruby子流程

Javascript 带有node.js的Ruby子流程,javascript,ruby,node.js,subprocess,Javascript,Ruby,Node.js,Subprocess,我正在尝试启动一个ruby实例作为我的节点程序的子进程。事实上,一切都很好,但我就是不能和ruby的STDIN和STDOUT交互。(当然,ruby程序可以在我的终端上使用键盘输入) 所以这是一个简化的代码,我想开始工作 simpleproc.js var util = require('util'), spawn = require('child_process').spawn, ruby = spawn('ruby', [__dirname + '/process.rb'

我正在尝试启动一个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
内部。所以我们可以说,ruby文件已正确启动,但没有从node接收任何内容(我尝试在
STDOUT.write
之后刷新,但do语句从未执行。

STDOUT.write
之后在ruby端尝试
STDOUT.flush

由于输出正在被缓冲。

很抱歉,它没有工作,因为ruby STDIN没有接收任何内容。如果我尝试在do语句中写入文件,则不会发生任何情况。因此,我看不出问题出在哪里。但这可能是由于我的节点版本(github repo中的主分支)造成的。可能是这个版本。使用node 0.4.2和ruby 1.8.7(Mac),在我添加刷新后,你的代码对我有效(没有刷新时保持沉默)。从ruby写入文件或节点应该不会有什么区别。哦,天哪!事实上,我写了这个
ruby.stdin.write(“ping”)
在我自己的JS文件中。但无论如何,谢谢你,你的答案很好,因为没有flush指令,它无法工作!谢谢!我尝试使用你的示例,但ruby似乎在创建日志文件之前就挂断了。有什么想法吗?