對於我的一個項目,我基本上希望能夠將一個命令傳遞給一個Node.js腳本並讓它執行它並逐行記錄輸出。這就是我現在所擁有的:Node.js子進程產生緩衝問題?
var child_process = require('child_process');
var child_spawn = child_process.spawn('ruby', ['test.rb']);
child_spawn.stdout.on('data', function(data) {
console.log('stdout: ' + data);
});
現在,當我尾-f系統記錄該工程,我會除外,但是當我用一個簡單的Ruby腳本我寫測試它一次爲臨危所有輸出如果它被緩衝?
腳本中的問題是:
puts "hello"
sleep(1)
puts "there"
sleep(1)
puts "my"
sleep(1)
puts "name"
sleep(1)
puts "is"
sleep(1)
puts "james"
當我在它自己的運行這個它的作品,因爲我敢肯定,你可以想像,在與之間的第二間隙的時間打印出一條線。
在節點文檔(http://nodejs.org/api/child_process.html)我看到這一點:
(請注意,某些程序使用行緩衝I/O內部不影響Node.js的,但它意味着你要發送的數據孩子的過程不會立即消耗。)
這是發生在這裏,有沒有辦法解決它?
啊有趣的是,這確實在技術上解決它。問題出在我的情況下,我並不總是能夠控制腳本/命令,所以我不能做那樣的調整。我實際上已經設法使用類似https://gist.github.com/jamesrwhite/3369fa6c04a6e14fb3a8的方式讓它在Ruby中工作,並且test.rb腳本將按預期工作,不會在每次打印後進行刷新。 –