我有一个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()记录时再次提示?
是的我确实想要创建某种基于聊天的系统/命令行界面,其中输出保持在输入之上。
谢谢!
答案 0 :(得分:3)
基本上你要问的是如何制作一个复杂的终端应用程序。最受欢迎的库名为ncurses
,它有node bindings here。不幸的是,我没有使用它的个人经验。
您的另一个选择是按照您说的做,并使用您自己的内部缓冲区手动重新渲染终端。您可以使用节点的tty
模块docs here获取输出终端的大小,然后使用ANSI escape codes清除终端,将光标定位在您想要的位置,然后使用{{1打印你想要的东西。
您可以在我的其他问题over here
中看到使用转义码的示例