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打印您想要的内容。

你可以在这里看到一个在我的另一个问题中使用转义代码的例子