2012-02-03 17 views
1

Rubyでシステムメソッドを呼び出すと、サブシェルでmyコマンドが実行され、できる限りすべて出力されます。私はfile.rbでこれを置くのであれば:Node.jsのサブシェルの出力の処理

system 'vim' 

をそして$ ruby file.rbを実行し、それは私がそれを使用することができVimを起動します。私は私が思ったのNode.jsで同等であった何をすべきかとfile.jsにそれを置く場合:

var exec = require('child_process').exec; 
exec('vim'); 

そして、それはVimの起動が、私は子プロセスと出力からSTDOUTキャッチしない限り、(何も出力しない$ node file.jsを実行しますそれは自分ではうまくいきません)。 Ruby with Nodeで何をしたのですか?

ここで例に示すように、あなたは node-ffiを使用してこれを行うことができます

答えて

1

Nodeの多くの関数と同様に、戻り値は実際には関数呼び出し自体によって返されるのではなく、関数の最後の引数として渡されるコールバックに渡されます。この設計により、子プロセスの実行中にノードのメインループが他のタスクを処理することができます。

あなただけの子供のstdout出力を印刷したい場合は、以下の操作を行います。

var exec = require('child_process').exec; 

exec('vim', function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
}); 

あなたも出力標準エラー出力およびプロセスの終了コードにしたい場合は、この試してみてください。

exec('vim', function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    console.log('stderr: ' + stderr); 
    console.log('exit code:', error ? error.code : 0); 
}); 

exec()は、spawn()の便利なラッパーであり、より強力なインターフェイスを提供し、stdinstdoutstderrのストリームを使用できることにも注意してください。

この例は、ノードのマニュアルhereから取られ、わずかに変更されています。

関連する問題