2012-11-19 74 views
0

我試圖使用spawn命令從nodejs執行命令行命令(此處爲cat)。將緩衝區限制到nodejs子進程的輸出

var spawn = require('child_process').spawn; 
var cat = spawn('cat'); 
result = new Buffer(2048); 
cat.stdout.on('data', function (data) 
{ 
    data.copy(result); 
}); 
cat.on('exit', function (code) 
{ 
    console.log(result.toString()); 
}); 
cat.stdin.write(InBUFFER); 
cat.stdin.end(); 

該命令的輸出似乎在緩衝區中的某處,但其餘的輸出也是如此。是否有某種空字符可用於確定輸出何時結束?

更新:澄清事情:在輸出中有很多隨機字符,它們似乎是緩衝區的一部分。我正在尋找一種方法來將命令行命令的有用輸出與其餘緩衝區分開。

+0

」該命令的輸出似乎在緩衝區中的某處,但其餘的輸出也是如此。「我已經多次閱讀過,我無法弄清楚它的含義。剩下的是什麼?輸出什麼? –

+0

對不起。我的意思是緩衝區的其餘部分。這似乎是隨機廢話。類似於未初始化的變量。輸出意味着通過console.log發送到控制檯的內容。 – funkysash

回答

1

這取決於你在InBUFFER裏面有什麼,你沒有顯示。

如果你有一個InBUFFER字符串,例如"test",該result將包含test之後很多個零,最多2048(中數字0將被轉換爲空時toString被調用)。
如果垃圾在InBUFFER之內,你會得到垃圾作爲輸出。也許你正在閱讀一個文件,而不是正確設置字符編碼。 「

+0

如果用'InBUFFER = new Buffer(「test」)填充inBuffer;'我的輸出以測試開始,然後以隨機數字和符號繼續。示例如上。我知道我可以限制它的長度,但對於不知道結果長度的情況(例如'ls'),這不起作用。 – funkysash

+0

如果通過result.fill(0)填充結果,那麼它就起作用。但是,這看起來不適合這個問題。 – funkysash

+0

實際上我認爲是這樣,因爲緩衝區可能不能保證填充零(默認情況下)。要麼是這樣,要麼只是傳遞字符串的長度:'result.toString('utf8',0,InBUFFER.length)' – mihai