当前位置: 首页 > 面试题库 >

nodejs如何从stdin中读取击键

荆弘伟
2023-03-14
问题内容

是否可以在正在运行的nodejs脚本中侦听传入的击键?如果我使用process.openStdin()并监听其'data'事件,则输入将被缓冲到下一个换行符,如下所示:

// stdin_test.js
var stdin = process.openStdin();
stdin.on('data', function(chunk) { console.log("Got chunk: " + chunk); });

运行此,我得到:

$ node stdin_test.js
                <-- type '1'
                <-- type '2'
                <-- hit enter
Got chunk: 12

我想要看的是:

$ node stdin_test.js
                <-- type '1' (without hitting enter yet)
 Got chunk: 1

我正在寻找一个等效于例如ruby的nodejsgetc

这可能吗?


问题答案:

如果切换到原始模式,则可以通过这种方式实现:

var stdin = process.openStdin(); 
require('tty').setRawMode(true);

stdin.on('keypress', function (chunk, key) {
  process.stdout.write('Get Chunk: ' + chunk + '\n');
  if (key && key.ctrl && key.name == 'c') process.exit();
});


 类似资料:
  • 我想从STDIN读取输入。我在C中使用fork()方法。我有子进程和父进程。我的输入是多行的。父进程只等待子进程终止,子进程只读取第一行,子进程终止后,父进程继续读取。我想要打印行。例如;输入-> null 子进程打印“星期一”,父进程打印“星期二”和“星期三”。一旦到达文件结尾,程序就会终止。 ./program

  • 问题内容: 我正在使用以下命令行调用来处理带有node的文本文件: 文件的每一行都需要单独处理,但是一旦处理完,输入行可能会被忘记。 使用标准输入的数据侦听器,我得到了按字节大小分块的输入流,因此进行了设置。 但这似乎草率。必须在行数组的第一项和最后一项周围进行按摩。有没有更优雅的方式做到这一点? 问题答案: 您可以使用readline模块逐行从stdin进行读取:

  • 问题内容: 当有字符可用时,是否有一种优雅的方法来触发事件?我想避免投票。 问题答案: 您将必须创建一个单独的线程以阻止读取,直到有可用的线程为止。 如果您不想实际消耗输入,则必须用内部缓冲区包装它,读入缓冲区,然后喊叫,并在要求输入时从缓冲区返回数据。 您可以这样解决:

  • 问题内容: 是否可以从node.js中的stdin同步读取?因为我正在用JavaScript编写JavaScript编译器,所以很有趣。Brainfuck支持需要同步执行的读取操作。 我尝试了这个: 但这只会产生以下输出: 问题答案: 我不知道什么时候出现,但这是向前迈出的有益一步:http : //nodejs.org/api/readline.html 现在,我可以一次从stdin中读取行。快

  • 问题内容: 我想阅读Go程序的原始内容。例如,如果我这样做了,我希望可以访问“ test stdin”。我尝试从中读取,但是如果其中没有任何内容,则它将等待输入。我也尝试过先检查大小,但是即使输入传入也为0。 我能做什么? 问题答案: 我认为您的问题本身没有明智的答案,因为没有“初始标准输入”之类的东西。类似于Unix的操作系统和Windows都实现了“标准流”的概念,它的工作原理如下(简化):创

  • 问题内容: 当管道来自“打开”(不知道正确的名称)文件时,我从标准输入或python中的管道读取问题。 我有例如 pipetest.py: 我运行了一段时间后会继续输出和Ctrl + c的程序 我没有输出。但是,如果我通过普通文件,它就可以工作。 片刻之后,按Ctrl + c结束 在程序结束之前如何获得任何输出(在这种情况下ping已结束)? 问题答案: 尝试下一个: