2011-07-15 14 views
1

nodeJSにスポーンします。私はちょうどこれを使用して、次のようにbashコマンドを実行しました。これは非常に非blocingと思われるので、私はコマンドがデータを切り捨てるので、ブラウザ画面でアクションを取得します。node.js perl - stdout行ごとにspawnを使用します。

ls = spawn('find',['/']); 
response.writeHead(200, { "Content-Type": "text/plain" }); 

ls.stdout.on('data', function (data) { 
    console.log('stdout: ' + data); 
    response.write(data); 
}); 

しかし、複数の引数を指定してperlスクリプトを実行したいとします。 Perlスクリプトは、ちょうどgetoptsはCPANのLIBを使用して引数を取得するために書かれており、それはLIBは、原料の山かかわらず実行することを期待CPANを使用している

ls = spawn('blah.pl',['--argstring here', '--arg blah']); 

- stdoutとstderrに出力する私は、エラーを持っているが、私はほとんどが標準出力権を心配している場合今。

これは私に出力を与えないことです。少なくともプログラムが実行を終了するまで完全にブロックされているように見えます。この場合、少なくとも10分はかかりません。

私は間違ったスポーンを使用していますか?

+0

が、これは効果的forkbombないです好きですか?何度、あなたはスポーンを呼んで終わりますか? – dwerner

+0

待って、もう一度苦情は何ですか?あなたのノードのループは、perlで待っていますか? – jcolebrand

+0

まあ、私は一度spawnと呼んだと思っています。私はs.stdout.on( 'end' ...を入れても構いませんが、ループを終了すると思いますが、それは一度にチャンクを与えるのではなく、perlの完全なstdoutを待っています。 – evolution

答えて

1

私は、ノードモジュール "キャリア"

carrier = require "carrier" 
childproc = require "child_process"  
find = childproc.spawn "find" 
find.stdout.setEncoding "utf8" 
linereader = carrier.carry find.stdout 
linereader.on "line", (line) -> console.log line 
関連する問題