¿Es posible escuchar las pulsaciones de teclas entrantes en un script de nodejs en ejecución? Si utilizo process.openStdin()
y escucho su 'data'
evento, la entrada se almacena en búfer hasta la siguiente nueva línea, así:
// stdin_test.js
var stdin = process.openStdin();
stdin.on('data', function(chunk) { console.log("Got chunk: " + chunk); });
Al ejecutar esto, obtengo:
$ node stdin_test.js
<-- type '1'
<-- type '2'
<-- hit enter
Got chunk: 12
Lo que me gustaría es ver:
$ node stdin_test.js
<-- type '1' (without hitting enter yet)
Got chunk: 1
Estoy buscando un nodejs equivalente a, por ejemplo, getc
en ruby
es posible?
Respuestas:
Puede lograrlo de esta manera, si cambia al modo sin formato:
fuente
process.stdin.resume(); process.stdin.on('data', function (chunk) { process.stdout.write('data: ' + chunk); });
setRawMode
para estar debajo deopenStdin()
, porque solo puede establecer el modo si elstdin
está inicializado.openStdin()
una API antigua y obsoleta? (Aprendí el modo de nodo después de 2011 ...)stdin.on('keypress',function(chunk,key))
se ha eliminado en versiones recientes. Y estoy bastante seguro de queopenStdin()
se ha eliminado o está obsoleto. Ahora, puede acceder a stdin comoprocess.stdin
Para aquellos que encuentren esta respuesta ya que se eliminó esta capacidad
tty
, aquí se explica cómo obtener un flujo de caracteres sin procesar de stdin:bastante simple, básicamente como la documentación de process.stdin, pero se usa
setRawMode( true )
para obtener un flujo sin procesar, que es más difícil de identificar en la documentación.fuente
En el nodo> = v6.1.0:
Ver https://github.com/nodejs/node/issues/6626
fuente
process.stdin.setRawMode is not a function
. Intentaré sumergirme un poco más más tarde.Esta versión utiliza el módulo de pulsación de teclas y es compatible con la versión 0.10, 0.8 y 0.6 de node.js, así como con iojs 2.3. Asegúrate de correr
npm install --save keypress
.fuente
process.stdin.setRawMode()
en su lugar pero que errores y dice que no hay método setRawMode, muy molestoprocess.stdin.setRawMode
existe, es una función y funciona correctamente. También probé en iojs-2.3.1 y todavía funciona allí.Con nodejs 0.6.4 probado (la prueba falló en la versión 0.8.14 ):
si lo ejecuta y:
Código importante # 1:
Código importante # 2:
fuente
fuente