readline with console.log在后台

我遇到了node.js的readline问题。 下面显示的是控制台输出:粗体的东西是我正在input的东西,剩下的就是服务器正在logging的东西。

 > Tes日志消息
 > Testin日志消息
 >日志消息
日志消息
 T日志消息
 获取日志消息
 > 123

简而言之,我的代码看起来像这样

setInterval(function() { console.log("log message") }, 1000); var cli = require('readline').createInterface(process.stdin, process.stdout); cli.setPrompt("> ", 2); cli.on('line', function(line) { cli.prompt(); }); cli.prompt(); 

我怎么能得到提示,下class去​​给新的输出房间,而不是完全捣毁我打字的任何东西?

这似乎有点解决了这个问题 – 在控制台login后至less会重新提示提示符。

 var log = console.log; console.log = function() { // cli.pause(); cli.output.write('\x1b[2K\r'); log.apply(console, Array.prototype.slice.call(arguments)); // cli.resume(); cli._refreshLine(); } 

但是,中断的提示不会被清除。

编辑:添加cli.output.write('\x1b[2K\r'); 使其工作


编辑2:更完整的解决scheme,使像util.log其他东西util.log工作:

 function fixStdoutFor(cli) { var oldStdout = process.stdout; var newStdout = Object.create(oldStdout); newStdout.write = function() { cli.output.write('\x1b[2K\r'); var result = oldStdout.write.apply( this, Array.prototype.slice.call(arguments) ); cli._refreshLine(); return result; } process.__defineGetter__('stdout', function() { return newStdout; }); } 

#EDIT 3:在调用之前和之后看起来像cli.pause()cli.resume()是多余的。