STDOUT 在提示时挡在 STDIN 前面



我有一个setInterval,他每秒记录一次时间。我想使用 STDIN 在我的脚本中执行命令,但 STDOUT 在我键入时移动光标并将自己置于提示符中。

我对提示没有太多经验,刚开始深入研究这个。

脚本:

setInterval(function(){
    console.log(new Date().toUTCString());
},1000)
var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.question("Hi there, how are you?", function(answer) {
});

输出:

Hi there, how are you?Mon, 17 Dec 2012 16:20:34 GMT
fine
Mon, 17 Dec 2012 16:20:35 GMT
Mon, 17 Dec 2012 16:20:36 GMT
Mon, 17 Dec 2012 16:20:37 GMT
Mon, 17 Dec 2012 16:20:38 GMT

你会如何解决这样的事情?缓存所有 STDOUT,清除屏幕,写入所有 STDOUT,并在每次 console.log() 正在记录时再次提示?

是的,我确实想创建某种基于聊天的系统/命令行界面,其中输出保持在输入上方。

谢谢!

基本上,您要问的是如何制作复杂的终端应用程序。最流行的库称为ncurses,它在这里有节点绑定。不幸的是,我没有使用它的个人经验。

您的另一种选择是按照您所说的进行操作,并使用您自己的内部缓冲区手动重新渲染终端。您可以使用 Node 的 tty 模块获取输出终端的大小,在此处提供文档,然后使用 ANSI 转义码清除终端,将光标定位在所需位置,然后使用 process.stdout.write 打印所需内容。

您可以在我的另一个问题中看到使用转义码的示例

这里

最新更新