2011-08-01 12 views
-1

hereに基づいて、Node.js(v0.4.8)からルビープロセス(v1.8.7)を生成しようとしています。プロセスと空のログファイルが作成されますが、それを終了するまで何も起こりません。 STDIN.each_lineビットを省略すると、コードはうまく動作します。Node.js ruby​​サブプロセスがハング

私はルビーがまだ入力を待っているので、何かstdinが終了しないと思っています。おそらくruby.stdin.write("ping\n");私はそれがすべきだと思いますか?ここで

+0

は、あなたがそれ自体でRubyのコードを実行することがありますか?あなたは同じ振る舞いを見ますか、それとも期待どおりに動いていますか? – Pat

+0

@patコマンドラインからrubyコードを実行すると、ランダムなテキストを入力してEnterキーを押すと、テキストがエコーされ、同じディレクトリにログファイルが作成されます。 –

+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(); 
関連する問題