nodejs如何从stdin读取击键
是否可以在正在运行的 Node.js 脚本中侦听传入的击键? 如果我使用 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
我正在寻找一个相当于 getc
in ruby
这可能吗?
Is it possible to listen for incoming keystrokes in a running nodejs script?
If I use process.openStdin()
and listen to its 'data'
event then the input is buffered until the next newline, like so:
// stdin_test.js
var stdin = process.openStdin();
stdin.on('data', function(chunk) { console.log("Got chunk: " + chunk); });
Running this, I get:
$ node stdin_test.js
<-- type '1'
<-- type '2'
<-- hit enter
Got chunk: 12
What I'd like is to see:
$ node stdin_test.js
<-- type '1' (without hitting enter yet)
Got chunk: 1
I'm looking for a nodejs equivalent to, e.g., getc
in ruby
Is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
对于那些因为此功能已从 tty 中剥离而找到答案的人,以下是如何从 stdin 获取原始字符流:
非常简单 - 基本上就像 process.stdin 的文档,但使用
setRawMode( true )
来获取原始流,这在文档中很难识别。For those finding this answer since this capability was stripped from
tty
, here's how to get a raw character stream from stdin:pretty simple - basically just like process.stdin's documentation but using
setRawMode( true )
to get a raw stream, which is harder to identify in the documentation.在节点 >= v6.1.0 中:
请参阅 https://github.com/nodejs/node/issues /6626
In node >= v6.1.0:
See https://github.com/nodejs/node/issues/6626
如果切换到原始模式,您可以通过这种方式实现:
You can achieve it this way, if you switch to raw mode:
该版本使用 keypress 模块,支持 Node.js 版本 0.10、0.8 和 0.6 以及 iojs 2.3。请务必运行
npm install --save keypress
。This version uses the keypress module and supports node.js version 0.10, 0.8 and 0.6 as well as iojs 2.3. Be sure to run
npm install --save keypress
.使用 Nodejs 0.6.4 进行测试(在版本 0.8.14 中测试失败):
如果运行它并且:
重要代码 #1:
重要代码 #2:
With nodejs 0.6.4 tested (Test failed in version 0.8.14):
if you run it and:
Important code #1:
Important code #2:
这将输出每个按键。使用您喜欢的任何代码更改 console.log 。
This will output each keypress. Change console.log with whatever code you like.
根据 Dan Heberden 的回答,这是一个异步函数 -
像这样使用 -
Based on Dan Heberden's answer, here's an async function -
Use like so -