STDOUT在STDIN前面提示?
我有一个setInterval每秒logging时间。 我想用STDIN来执行脚本中的命令,但是STDOUT在我input的时候正在移动光标,并把它自己放到提示符中。
我没有太多的提示经验,刚开始潜水。
脚本:
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
你会如何解决这个问题? caching所有的STDOUT,清除屏幕,写入所有的STDOUT,并在每次console.log()正在logging时再次提示?
是的,我想要创build某种基于聊天的系统/命令行界面,输出保持在input之上。
谢谢!
基本上你要问的是如何制作一个复杂的terminal应用程序。 最stream行的库称为ncurses
,它在这里有节点绑定 。 我不幸有使用它的个人经验。
您的其他选项将按照您的说法进行,并使用您自己的内部缓冲区手动重新呈现terminal。 您可以使用Node的tty
模块获取输出terminal的大小,在这里是docs ,然后使用ANSI转义码清除terminal,将光标放在所需的位置,然后使用process.stdout.write
打印您想要的内容。
你可以在这里看到一个在我的另一个问题中使用转义代码的例子