É possível ouvir as teclas digitadas em um script nodejs em execução? Se eu usar process.openStdin()
e ouvir seu 'data'
evento, a entrada será armazenada em buffer até a próxima nova linha, assim:
// stdin_test.js
var stdin = process.openStdin();
stdin.on('data', function(chunk) { console.log("Got chunk: " + chunk); });
Executando isso, eu obtenho:
$ node stdin_test.js
<-- type '1'
<-- type '2'
<-- hit enter
Got chunk: 12
O que eu gostaria é de ver:
$ node stdin_test.js
<-- type '1' (without hitting enter yet)
Got chunk: 1
Estou procurando um nodejs equivalente a, por exemplo, getc
em ruby
Isso é possível?
Respostas:
Você pode conseguir desta forma, se alternar para o modo bruto:
fonte
process.stdin.resume(); process.stdin.on('data', function (chunk) { process.stdout.write('data: ' + chunk); });
setRawMode
para abaixo deopenStdin()
, porque você só pode definir o modo sestdin
for inicializado.openStdin()
uma API obsoleta e antiga? (Aprendi a maneira de nó depois de 2011 ...)stdin.on('keypress',function(chunk,key))
, foi removido em versões recentes. E eu tenho certezaopenStdin()
que foi removido ou está obsoleto. Agora, você pode acessar stdin asprocess.stdin
Para aqueles que encontraram essa resposta, uma vez que esse recurso foi removido
tty
, veja como obter um fluxo de caractere bruto de stdin:muito simples - basicamente como a documentação do process.stdin, mas usando
setRawMode( true )
para obter um fluxo bruto, que é mais difícil de identificar na documentação.fonte
No nó> = v6.1.0:
Veja https://github.com/nodejs/node/issues/6626
fonte
process.stdin.setRawMode is not a function
. Tentarei mergulhar um pouco mais fundo depois.Esta versão usa o módulo keypress e oferece suporte a node.js versão 0.10, 0.8 e 0.6, bem como iojs 2.3. Certifique-se de correr
npm install --save keypress
.fonte
process.stdin.setRawMode()
vez disso, mas que erros e não diz nenhum método setRawMode, muito chatoprocess.stdin.setRawMode
existe, é uma função e funciona corretamente. Eu também testei no iojs-2.3.1 e ele ainda funciona lá.Com nodejs 0.6.4 testado ( teste falhou na versão 0.8.14 ):
se você executá-lo e:
Código importante # 1:
Código importante 2:
fonte
fonte