2015-04-02 4 views
4

Как записать вывод в файл? Я пытался вместо process.stdout использовать fs.createWriteStream(temp + '/export2.json'), но он не работает.Вывести вывод строки в файл Node.js

var rl = readline.createInterface({ 
    input: fs.createReadStream(temp + '/export.json'), 
    output: process.stdout, 
    terminal: false 
}); 

rl.on('line', function(line) { 
    rl.write(line); 
}); 

ответ

3

Ссылаясь на node/readline

линии 313:

Interface.prototype.write = function(d, key) { 
    if (this.paused) this.resume(); 
    this.terminal ? this._ttyWrite(d, key) : this._normalWrite(d); 
}; 

по телефону rl.write() вы либо написать TTY или вызвать _normalWrite(), определение которого следует блок.

Interface.prototype._normalWrite = function(b) { 
    // some code 
    // ....... 

    if (newPartContainsEnding) { 
    this._sawReturn = /\r$/.test(string); 
    // got one or more newlines; process into "line" events 
    var lines = string.split(lineEnding); 
    // either '' or (concievably) the unfinished portion of the next line 
    string = lines.pop(); 
    this._line_buffer = string; 
    lines.forEach(function(line) { 
     this._onLine(line); 
    }, this); 
    } else if (string) { 
    // no newlines this time, save what we have for next time 
    this._line_buffer = string; 
    } 
}; 

Выход написан в _line_buffer.

линия 96:

function onend() { 
    if (util.isString(self._line_buffer) && self._line_buffer.length > 0) { 
     self.emit('line', self._line_buffer); 
    } 
    self.close(); 
} 

Мы находим, _line_buffer излучается line события в конечном счете. Вот почему вы не можете писать вывод в writeStream. Чтобы решить эту проблему, вы можете просто открыть файл, используя fs.openSync(), и fs.write() в rl.on('line', function(line){}) callback.

Пример кода:

var rl = readline.createInterface({ 
    input: fs.createReadStream(temp + '/export.json'), 
    output: process.stdout, 
    terminal: false 
}); 

fd = fs.openSync('filename', 'w'); 
rl.on('line', function(line) { 
    fs.write(fd, line); 
}); 
+0

Большое спасибо :) – noone

Смежные вопросы