我遇到了node.js的readline问题。下面显示的是控制台输出:粗体的东西是我正在输入的内容,其余的是服务器记录的内容。
> Teslog message > Testinlog message > log message log message Tlog message estinglog message > 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();
我怎样才能获得提示转移到新的输出空间,而不会完全破坏我输入的内容?
答案 0 :(得分:5)
这似乎在某种程度上解决了问题 - 在登录控制台后,至少会重新绘制提示。
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:更完整的解决方案,使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()
是多余的。