2011-06-24 66 views
3

我正在編寫一個node.js應用程序,它將stdout傳送到一個文件。我正在用console.log寫所有東西。一段時間後,我的應用程序達到1GB限制並停止。有趣的是,如果我使用console.error而不是console.log,則內存使用率保持較低,程序運行良好。所以它看起來像node.js不能刷新標準輸出流,一切都保存在內存中。我想保持stderr免費的錯誤。如何使用node.js在stdout中編寫阻塞?

我的問題是:

有沒有辦法將阻塞寫入標準輸出?或者至少,我可以寫一個回調到標準輸出,所以我可以確保我寫的不是太多?

thx!

回答

10

如果你真的真的想要同步寫入到標準輸出,你可以這樣做:

var fs = require('fs'); 
fs.writeSync(1, "Foo\n"); 
fs.fsyncSync(1); 
+0

那是一個很好的解決方案!但是什麼是fs.fsyncSync(1)? – user698601

+1

user698601:確保所有內容都寫在文件描述符之一上。一個是stdout,兩個是stderr,三個是stdin。 – thejh

1

不要。

你想要做的是pause()你輸入的時候輸出滿了,就像pump()方法那樣,然後resume()它當你有空間寫的時候。如果不是這樣,你的過程就會變得龐大。

您可能想要使用更直接的outputStream東西,雖然,或write()調用,而不是console.log()

5

使用process.stdout.write寫入,返回值是數據是否被緩衝。如果是這樣,請在process.stdout發出drain事件時繼續寫入。

如果你想你的代碼如下同步,使用streamlinejs如下所述:Node.js stdout flush