¿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, getcen 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); });setRawModepara estar debajo deopenStdin(), porque solo puede establecer el modo si elstdinestá 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.stdinPara 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.setRawModeexiste, 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