2011-07-15 53 views
1

在nodeJS中生成spawn。我剛剛設法使用它來運行bash命令如下。這似乎是非常不方便的,並且我在瀏覽器屏幕上執行操作,因爲該命令會遍歷數據。node.js使用spawn for perl - stdout逐行

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

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

但我想運行一個perl腳本與多個參數。

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

Perl腳本是剛剛寫入得到使用getopts的CPAN LIB參數,並使用CPAN期待LIB雖則一堆東西運行 - 如果我有一個錯誤輸出,輸出和錯誤,但我主要關心的stdout權現在。

事情是這樣給我沒有輸出。似乎完全阻止,直到程序執行完畢......並且這種情況至少持續10分鐘。

我使用spawn錯誤嗎?

+0

這不是一個有效forkbomb?你有多少次致電產卵? – dwerner

+0

等一下,又是什麼投訴?你的節點循環在等待perl上閒置嗎? – jcolebrand

+0

嗯,我有點以爲我稱之爲產卵一次 - 反覆得到輸出。我可以放一個s.stdout.on('end'...在那裏我也想結束循環,但是它是坐在空閒的等待perl的完整標準輸出,而不是一次給它大塊。 – 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